This is Kara’s first pass at analyzing the Spiritual Epidemiology data (with data from 2019-03-08). (Note: PDF printed portrait, 90% zoom, default margins.)

Porosity

For Spiritual Epidemiology, the Porosity scale consisted of 16 basic items, and follow-up questions to a subset of these items. For each of the basic items, participants could respond by saying “it does not happen” (scored as 0), “it might happen” (scored as 0.5), or “it definitely happens” (scored as 1).

Overall scores

First, I’ll examine overall “scores” on this scale, taking into account only the basic items (not the follow-up questions). Scores could range from 0 (equivalent to saying “it does not happen” for all 16 items) to 16 (equivalent to saying “it definitely happens” for all 16 items).

From these plots, it is clear that while there was substantial variability across individuals within each site, participants’ average response also varied fairly dramatically across sites, with participants in China endorsing the fewest items, participants in the US and Thailand endorsing slightly more, and participants in Ghana and Vanuatu endorsing the most.

Comparing porosity scores across sites [model: lm(score ~ epi_ctry, d_por_scored)]
parameter b standard error t p significant
(Intercept) 6.84 0.10 71.30 <0.001 *
epi_ctrynonUS_US 0.55 0.05 12.08 <0.001 *
epi_ctryGHVT_THCH 4.13 0.11 38.05 <0.001 *
epi_ctryGH_VT 0.03 0.15 0.21 0.833
epi_ctryTH_CH 0.91 0.16 5.67 <0.001 *
Comparing porosity responses across sites [model: lmer(response ~ epi_ctry + (1 | epi_subj) + (epi_ctry | question)]
parameter b standard error df t p significant
(Intercept) 0.57 0.04 21.35 15.75 <0.001 *
epi_ctrynonUS_US 0.06 0.01 26.30 6.66 <0.001 *
epi_ctryGHVT_THCH 0.37 0.04 24.73 10.31 <0.001 *
epi_ctryGH_VT -0.09 0.03 30.69 -3.09 0.004 *
epi_ctryTH_CH 0.08 0.02 199.61 5.18 <0.001 *

I ran two kinds of statistical analyses of these results: One comparing these average scores across sites (top table), and the other taking into account variability across individual participants and across individual items in the scale (bottom table). Theoretically, these analyses should yield pretty similar results, so I would be especially confident in effects that are consistent across the two analyses and that seem obvious from the plots.

Both analyses suggest that participants in sites outside of the US generally had significantly higher Porosity scores than participants in the US (see “epi_ctrynonUS_US” rows)—but looking at the plots it is clear that this was driven by participants in Ghana and Vanuatu, and was not true, on average, among participants in Thailand or China. In line with this, both analyses suggest that participants in Ghana and Vanuatu had significantly higher Porosity scores than participants in Thailand and China—and that this difference was far greater than the difference between “the West vs. the rest” (see “epi_ctrynonUS_US” rows). Both analyses also suggest that participants in Thailand had significantly higher Porosity scores, on average, than participants in China (see “epi_ctryTH_CH” rows).

By charismatic status

Now I’ll break things down by participants’ charismatic status.

Ignoring unknown parameters: height, widthJoining, by = c("epi_ctry", "epi_charc")
Column `epi_charc` has different attributes on LHS and RHS of join

From these plots, it looks like the general pattern of site differences held both among non-charismatics and charismatics, but that especially in sites where Porosity scores were generally lower (the US, Thailand, and China), charismatics scored higher in Porosity than non-charismatics. (This makes sense!)

Comparing porosity scores across sites and charismatic status [model: lm(score ~ epi_ctry * epi_charc, d_por_scored %>% (...))]
parameter b standard error t p significant
(Intercept) 6.34 0.10 62.29 <0.001 *
epi_ctrynonUS_US 0.56 0.05 11.75 <0.001 *
epi_ctryGHVT_THCH 4.47 0.12 38.58 <0.001 *
epi_ctryGH_VT 0.05 0.16 0.29 0.771
epi_ctryTH_CH 0.40 0.16 2.45 0.015 *
epi_charccharc_non 2.54 0.25 10.34 <0.001 *
epi_ctrynonUS_US:epi_charccharc_non 0.01 0.11 0.07 0.944
epi_ctryGHVT_THCH:epi_charccharc_non -2.14 0.28 -7.50 <0.001 *
epi_ctryGH_VT:epi_charccharc_non -0.06 0.29 -0.20 0.841
epi_ctryTH_CH:epi_charccharc_non 0.18 0.49 0.36 0.719

I had trouble running the second kind of analysis (taking into account variability across individual participants and across individual items in the scale), so I only ran the first (using sum scores rather than individual responses).

This analysis confirmed that all of the general observations discussed in the previous section hold within the non-charismatic samples. In addition, collapsing across sites, charismatic participants tended to have higher Porosity scores (see “epi_charccharc_non” row), and this difference was more pronounced in Thailand and China than in Ghana and Vanuatu (see “epi_ctryGHVT_THCH:epi_charccharc_non”).

By item

Next, I’ll examine responses to individual items on the Porosity scale, first focusing on the basic items and then turning to the follow-up questions and a few site-specific questions. For each item, participants could say “it does not happen” (scored as 0), “it might happen” (scored as 0.5), or “it definitely happens” (scored as 1).


|=========================                        | 51% ~2 s remaining     
|==========================                       | 53% ~2 s remaining     
|==========================                       | 54% ~2 s remaining     
|===========================                      | 56% ~2 s remaining     
|============================                     | 58% ~2 s remaining     
|=============================                    | 61% ~2 s remaining     
|==============================                   | 62% ~1 s remaining     
|==============================                   | 62% ~2 s remaining     
|===============================                  | 64% ~1 s remaining     
|===============================                  | 65% ~1 s remaining     
|================================                 | 67% ~1 s remaining     
|=================================                | 68% ~1 s remaining     
|=================================                | 69% ~1 s remaining     
|==================================               | 70% ~1 s remaining     
|===================================              | 72% ~1 s remaining     
|====================================             | 74% ~1 s remaining     
|=====================================            | 76% ~1 s remaining     
|=====================================            | 77% ~1 s remaining     
|======================================           | 79% ~1 s remaining     
|=======================================          | 80% ~1 s remaining     
|=======================================          | 81% ~1 s remaining     
|========================================         | 82% ~1 s remaining     
|=========================================        | 84% ~1 s remaining     
|=========================================        | 86% ~1 s remaining     
|==========================================       | 88% ~1 s remaining     
|===========================================      | 89% ~0 s remaining     
|============================================     | 90% ~0 s remaining     
|============================================     | 91% ~0 s remaining     
|=============================================    | 92% ~0 s remaining     
|=============================================    | 92% ~0 s remaining     
|=============================================    | 93% ~0 s remaining     
|==============================================   | 95% ~0 s remaining     
|==============================================   | 96% ~0 s remaining     
|===============================================  | 96% ~0 s remaining     
|===============================================  | 98% ~0 s remaining     
|================================================ | 98% ~0 s remaining     
|================================================ | 99% ~0 s remaining     

There is so much to unpack here! When I look at these items, a few things that I think about are:

  • Which items tend to follow the overall pattern established by the “overall scores” presented in the previous section? (e.g., question #1, many others)
  • Among items that follow the overall pattern, for which items is this pattern exaggerated? (e.g., questions #5, #12) For which items is this pattern attentuated? (e.g., quesitons #2, #3)
  • Which items do not follow this overall trend? (e.g., question #16)
  • Which items seem to pick out an experience that is uniquely salient/prevalent in a particular site? (e.g., questions #7, #16)
  • Which items seem to pick out an experience that is uniquely salient/prevalent among charismatics? (e.g., questions #4, #5)

Note that I just picked out a few examples to illustrate what I mean, but there are certainly other interesting cases that might be worth thinking about more deeply - e.g., question #15, where US participants appear more like Ghanaian & ni-Van participants than Thai or Chinese participants).

Here are participants’ answers to the follow-up questions for a subset of those basic items:


|================                                 | 33% ~4 s remaining     
|================                                 | 34% ~4 s remaining     
|=================                                | 35% ~5 s remaining     
|=================                                | 36% ~5 s remaining     
|==================                               | 37% ~4 s remaining     
|==================                               | 38% ~4 s remaining     
|===================                              | 39% ~4 s remaining     
|====================                             | 41% ~4 s remaining     
|====================                             | 42% ~4 s remaining     
|====================                             | 43% ~4 s remaining     
|=====================                            | 44% ~4 s remaining     
|======================                           | 45% ~4 s remaining     
|======================                           | 46% ~4 s remaining     
|=======================                          | 47% ~4 s remaining     
|=======================                          | 48% ~4 s remaining     
|========================                         | 49% ~3 s remaining     
|========================                         | 51% ~3 s remaining     
|=========================                        | 52% ~3 s remaining     
|=========================                        | 53% ~3 s remaining     
|==========================                       | 54% ~3 s remaining     
|==========================                       | 55% ~3 s remaining     
|===========================                      | 56% ~3 s remaining     
|============================                     | 57% ~3 s remaining     
|============================                     | 58% ~3 s remaining     
|=============================                    | 59% ~3 s remaining     
|=============================                    | 61% ~3 s remaining     
|==============================                   | 62% ~3 s remaining     
|==============================                   | 63% ~3 s remaining     
|===============================                  | 64% ~2 s remaining     
|================================                 | 66% ~2 s remaining     
|================================                 | 66% ~2 s remaining     
|================================                 | 67% ~2 s remaining     
|=================================                | 68% ~2 s remaining     
|=================================                | 68% ~2 s remaining     
|=================================                | 69% ~2 s remaining     
|==================================               | 70% ~2 s remaining     
|==================================               | 71% ~2 s remaining     
|===================================              | 72% ~2 s remaining     
|===================================              | 73% ~2 s remaining     
|====================================             | 75% ~2 s remaining     
|=====================================            | 77% ~2 s remaining     
|======================================           | 78% ~2 s remaining     
|======================================           | 79% ~1 s remaining     
|=======================================          | 81% ~1 s remaining     
|========================================         | 82% ~1 s remaining     
|========================================         | 82% ~1 s remaining     
|========================================         | 83% ~1 s remaining     
|=========================================        | 84% ~1 s remaining     
|=========================================        | 84% ~1 s remaining     
|=========================================        | 86% ~1 s remaining     
|==========================================       | 87% ~1 s remaining     
|===========================================      | 88% ~1 s remaining     
|===========================================      | 89% ~1 s remaining     
|============================================     | 90% ~1 s remaining     
|============================================     | 92% ~1 s remaining     
|=============================================    | 93% ~1 s remaining     
|==============================================   | 94% ~0 s remaining     
|==============================================   | 96% ~0 s remaining     
|===============================================  | 97% ~0 s remaining     
|===============================================  | 98% ~0 s remaining     
|================================================ | 99% ~0 s remaining     
|=================================================|100% ~0 s remaining     

And here are participants’ answers to a few site-specific questions:

Prayer (spiritual experience Question #1)

For Spiritual Epidemiology, the “spiritual experience” portion of the epidemiology began with two questions intended to gauge participants’ prayer practice. Here are participants’ responses to these two questions:

All spiritual experiences (Questions #2-23)

For Spiritual Epidemiology, the Spiritual Experiences scale consisted of 22 basic items (34 basic items in Thailand), and follow-up questions to a subset of these items. For each of the basic items, participants could respond by saying “no” (scored as 0), “maybe” (scored as 0.5; this might have only been available in some sites?), or “yes” (scored as 1).

Note: In addition to these 22 items, there were two items included as part of this section on “spiritual experiences” that were intended to gauge participants’ prayer practice - see Prayer (spiritual experience Question #1), above.

Overall scores

First, I’ll examine overall “scores” on this scale, taking into account only the basic items (not the follow-up questions).

In Thailand, there were an additional 12 quesitons (about experiences of additional “beings”) that; I have treated this discrepancy across sites in two different ways below: (1) Consdering all beings and using proportions, rather than sums, as “scores” (equivalent to asking, for each particiant, what proportion of the items they were exposed to did they endorse?); and (2) Considering only the first 5 beings asked about in each site, such that all participants were asked the same number of questions.

Considering all “beings”

Using the first approach (considering all “beings,” with 12 more beings in Thailand than in any other site), scores could range from 0 (equivalent to saying “no” for all 22-34 items) to 1 (equivalent to saying “yes” for all 22-34 items).

From these plots, it is clear that while there was substantial variability across individuals within each site, participants’ average response also varied fairly dramatically across sites, with participants in China endorsing the fewest items, participants in the US and Thailand endorsing slightly more, and participants in Ghana and Vanuatu endorsing the most. This is the same pattern we observed for Porosity scores, above.

Comparing spiritual experience scores across sites [model: lm(score ~ epi_ctry, d_spex_base_q2to23_scored_propall)]
parameter b standard error t p significant
(Intercept) 0.28 0.01 50.77 <0.001 *
epi_ctrynonUS_US 0.01 0.00 3.72 <0.001 *
epi_ctryGHVT_THCH 0.10 0.01 15.74 <0.001 *
epi_ctryGH_VT -0.04 0.01 -4.59 <0.001 *
epi_ctryTH_CH 0.07 0.01 7.77 <0.001 *
Comparing spiritual experience responses across sites [model: lmer(response ~ epi_ctry + (1 | epi_subj) + (epi_ctry | question), d_spex_base_q2to23)]
parameter b standard error df t p significant
(Intercept) 0.24 0.02 49.85 9.83 <0.001 *
epi_ctrynonUS_US 0.00 0.01 34.43 0.75 0.46
epi_ctryGHVT_THCH 0.10 0.02 32.57 5.60 <0.001 *
epi_ctryGH_VT -0.05 0.03 29.42 -1.90 0.067
epi_ctryTH_CH 0.06 0.02 39.20 3.06 0.004 *

Again, I ran two kinds of statistical analyses of these results: One comparing these scores across sites (top table), and the other taking into account variability across individual participants and across individual items in the scale (bottom table). Theoretically, these analyses should yield pretty similar results, so I would be especially confident in effects that are consistent across the two analyses and that seem obvious from the plots.

Both analyses suggest that participants in sites outside of the US generally had significantly higher Porosity scores than participants in Ghana and Vanuatu had significantly higher Porosity scores than participants in Thailand and China (see “epi_ctrynonUS_US” rows), and that participants in Thailand had significantly higher Porosity scores, on average, than participants in China (see “epi_ctryTH_CH” rows).

By charismatic status

Now I’ll break things down by participants’ charismatic status.

Ignoring unknown parameters: height, widthJoining, by = c("epi_ctry", "epi_charc")
Column `epi_charc` has different attributes on LHS and RHS of join

From these plots, it looks like the general pattern of site differences held both among non-charismatics and charismatics, but that charismatics scored higher in Spiritual Experience than non-charismatics, across the board. (This makes sense!)

Comparing spiritual experience scores across sites and charismatic status [model: lm(score ~ epi_ctry * epi_charc, d_spex_base_q2to23_scored_propall %>% (...))]
parameter b standard error t p significant
(Intercept) 0.26 0.01 41.83 <0.001 *
epi_ctrynonUS_US 0.01 0.00 4.36 <0.001 *
epi_ctryGHVT_THCH 0.10 0.01 14.14 <0.001 *
epi_ctryGH_VT -0.04 0.01 -4.38 <0.001 *
epi_ctryTH_CH 0.06 0.01 6.17 <0.001 *
epi_charccharc_non 0.10 0.01 6.93 <0.001 *
epi_ctrynonUS_US:epi_charccharc_non -0.01 0.01 -2.11 0.035 *
epi_ctryGHVT_THCH:epi_charccharc_non -0.03 0.02 -1.98 0.048 *
epi_ctryGH_VT:epi_charccharc_non 0.01 0.02 0.53 0.597
epi_ctryTH_CH:epi_charccharc_non -0.01 0.03 -0.33 0.739

I didn’t try to run the second kind of analysis (taking into account variability across individual participants and across individual items in the scale), only the first (using sum scores rather than individual responses).

This analysis confirmed that all of the general observations discussed in the previous section hold within the non-charismatic samples. In addition, collapsing across sites, charismatic participants tended to have higher Porosity scores (see “epi_charccharc_non” row), and this difference was more pronounced in non-US samples than in the US sample (see “r_spex_base_q2to23_scored_propall_bycharc” row), and more pronounced in Thailand and China than in Ghana and Vanuatu (see “epi_ctryGHVT_THCH:epi_charccharc_non”).

Considering first five “beings” only

Using the second approach (considering only the first five “beings” in each site), scores could range from 0 (equivalent to saying “no” for all 22 items) to 22 (equivalent to saying “yes” for all 22 items).

These plots look very similar to the plots considering all beings (which I find reassuring).

Comparing spiritual experience scores across sites [model: lm(score ~ epi_ctry, d_spex_base_q2to23_scored_first5)]
parameter b standard error t p significant
(Intercept) 6.19 0.12 50.66 <0.001 *
epi_ctrynonUS_US 0.23 0.06 3.87 <0.001 *
epi_ctryGHVT_THCH 2.08 0.14 14.99 <0.001 *
epi_ctryGH_VT -0.90 0.19 -4.83 <0.001 *
epi_ctryTH_CH 1.73 0.20 8.45 <0.001 *

This pattern of results are identical to the pattern of results considering all beings (which, again, I find reassuring).

By charismatic status

Now I’ll break things down by participants’ charismatic status.

Ignoring unknown parameters: height, widthJoining, by = c("epi_ctry", "epi_charc")
Column `epi_charc` has different attributes on LHS and RHS of join

Again, from these plots, it looks like the general pattern of site differences held both among non-charismatics and charismatics, but that charismatics scored higher in Spiritual Experience than non-charismatics, across the board. (This makes sense!)

Comparing spiritual experience scores across sites and charismatic status [model: lm(score ~ epi_ctry * epi_charc, d_spex_base_q2to23_scored_first5 %>% (...))]
parameter b standard error t p significant
(Intercept) 5.71 0.14 41.75 <0.001 *
epi_ctrynonUS_US 0.29 0.06 4.47 <0.001 *
epi_ctryGHVT_THCH 2.10 0.16 13.46 <0.001 *
epi_ctryGH_VT -0.99 0.22 -4.48 <0.001 *
epi_ctryTH_CH 1.49 0.22 6.83 <0.001 *
epi_charccharc_non 2.24 0.33 6.80 <0.001 *
epi_ctrynonUS_US:epi_charccharc_non -0.30 0.14 -2.05 0.04 *
epi_ctryGHVT_THCH:epi_charccharc_non -0.76 0.38 -1.98 0.048 *
epi_ctryGH_VT:epi_charccharc_non 0.14 0.39 0.35 0.724
epi_ctryTH_CH:epi_charccharc_non -0.25 0.66 -0.38 0.707

I didn’t try to run the second kind of analysis (taking into account variability across individual participants and across individual items in the scale), only the first (using sum scores rather than individual responses).

This analysis confirmed that all of the general observations discussed in the previous section hold within the non-charismatic samples. In addition, collapsing across sites, charismatic participants tended to have higher Porosity scores (see “epi_charccharc_non” row), and this difference was more pronounced in non-US samples than in the US sample (see “r_spex_base_q2to23_scored_first5_bycharc” row), and more pronounced in Thailand and China than in Ghana and Vanuatu (see “epi_ctryGHVT_THCH:epi_charccharc_non”).

In the following four sections (Spiritual experiences: Universal questions, set 1 (Questions #2-10), Spiritual experiences: Beings questions (Questions #11-15 + more for Thailand), Spiritual experiences: Universal questions, set 2 (Questions #16-21), and Spiritual experiences: Universal questions, set 3 (Questions #22-23)), I look at scores for sub-sections of the Spiritual Experience scale, and at responses to individual items in this scale, including follow-up items. I do not provide text commentary on these additional plots and analyses at this time, but they all follow the same logic as the plots and analyses that I have annotated above.

Spiritual experiences: Universal questions, set 1 (Questions #2-10)

Overall scores

Removed 1 rows containing missing values (geom_point).

By item


|======                                           | 13% ~28 s remaining    
|=======                                          | 14% ~26 s remaining    
|========                                         | 17% ~22 s remaining    
|=========                                        | 19% ~19 s remaining    
|==========                                       | 21% ~17 s remaining    
|===========                                      | 24% ~14 s remaining    
|=============                                    | 27% ~13 s remaining    
|==============                                   | 29% ~12 s remaining    
|===============                                  | 31% ~11 s remaining    
|================                                 | 34% ~9 s remaining     
|=================                                | 37% ~8 s remaining     
|==================                               | 38% ~8 s remaining     
|===================                              | 39% ~8 s remaining     
|===================                              | 40% ~8 s remaining     
|====================                             | 41% ~7 s remaining     
|====================                             | 42% ~7 s remaining     
|=====================                            | 43% ~7 s remaining     
|======================                           | 46% ~7 s remaining     
|=======================                          | 48% ~6 s remaining     
|=======================                          | 49% ~6 s remaining     
|========================                         | 50% ~6 s remaining     
|=========================                        | 51% ~6 s remaining     
|=========================                        | 52% ~6 s remaining     
|==========================                       | 53% ~5 s remaining     
|==========================                       | 54% ~5 s remaining     
|===========================                      | 56% ~5 s remaining     
|===========================                      | 57% ~5 s remaining     
|============================                     | 58% ~5 s remaining     
|=============================                    | 60% ~5 s remaining     
|=============================                    | 61% ~4 s remaining     
|===============================                  | 63% ~4 s remaining     
|===============================                  | 64% ~4 s remaining     
|================================                 | 66% ~4 s remaining     
|================================                 | 67% ~4 s remaining     
|=================================                | 68% ~3 s remaining     
|=================================                | 69% ~3 s remaining     
|==================================               | 70% ~3 s remaining     
|==================================               | 71% ~3 s remaining     
|===================================              | 73% ~3 s remaining     
|====================================             | 74% ~3 s remaining     
|=====================================            | 77% ~2 s remaining     
|======================================           | 79% ~2 s remaining     
|=======================================          | 81% ~2 s remaining     
|========================================         | 82% ~2 s remaining     
|========================================         | 83% ~2 s remaining     
|=========================================        | 86% ~1 s remaining     
|==========================================       | 87% ~1 s remaining     
|===========================================      | 88% ~1 s remaining     
|===========================================      | 89% ~1 s remaining     
|============================================     | 91% ~1 s remaining     
|=============================================    | 93% ~1 s remaining     
|==============================================   | 96% ~0 s remaining     
|===============================================  | 97% ~0 s remaining     
|================================================ | 99% ~0 s remaining     

Spiritual experiences: Beings questions (Questions #11-15 + more for Thailand)

Overall scores

Considering all “beings” (more for Thailand)

Removed 1 rows containing missing values (geom_point).Removed 1 rows containing missing values (geom_point).

Considering first five “beings” only

By item


|==========================                       | 54% ~2 s remaining     
|==========================                       | 54% ~2 s remaining     
|==========================                       | 55% ~2 s remaining     
|===========================                      | 56% ~2 s remaining     
|===========================                      | 56% ~2 s remaining     
|===========================                      | 56% ~2 s remaining     
|===========================                      | 57% ~2 s remaining     
|============================                     | 57% ~2 s remaining     
|=============================                    | 59% ~2 s remaining     
|=============================                    | 60% ~2 s remaining     
|=============================                    | 61% ~2 s remaining     
|=============================                    | 61% ~2 s remaining     
|==============================                   | 62% ~2 s remaining     
|=================================                | 69% ~1 s remaining     
|==================================               | 71% ~1 s remaining     
|==================================               | 71% ~1 s remaining     
|===================================              | 72% ~1 s remaining     
|=====================================            | 77% ~1 s remaining     
|=======================================          | 82% ~1 s remaining     
|==========================================       | 87% ~1 s remaining     
|===========================================      | 89% ~0 s remaining     
|===========================================      | 89% ~0 s remaining     
|===========================================      | 89% ~0 s remaining     
|============================================     | 90% ~0 s remaining     
|==============================================   | 94% ~0 s remaining     
|================================================ | 99% ~0 s remaining     
|================================================ | 99% ~0 s remaining     
|=================================================|100% ~0 s remaining     

Spiritual experiences: Universal questions, set 2 (Questions #16-21)

Overall scores

By item


|=================================                | 68% ~1 s remaining     
|==================================               | 70% ~1 s remaining     
|===================================              | 72% ~1 s remaining     
|====================================             | 75% ~1 s remaining     
|=====================================            | 77% ~1 s remaining     
|=======================================          | 80% ~1 s remaining     
|========================================         | 82% ~1 s remaining     
|=========================================        | 85% ~1 s remaining     
|==========================================       | 87% ~0 s remaining     
|============================================     | 90% ~0 s remaining     
|=============================================    | 93% ~0 s remaining     
|===============================================  | 97% ~0 s remaining     
|================================================ | 98% ~0 s remaining     
|=================================================|100% ~0 s remaining     

Spiritual experiences: Universal questions, set 3 (Questions #22-23)

Overall scores

By item

Relationships between porosity and spiritual experience

Finally, I will consider the relationship between Porosity scores and Spiritual Experience scores, comparing this relationship across sites and examining this relationship within each site indivdidually. Again, I will explore two ways of handling the discrepancy between questions asked in Thailand vs. other sites.

Considering all “beings” (more for Thailand)

From the plot, it is clear that there is a general relationship between Porosity and Spiritual Experience scores. The strength of this relationships appears to vary somewhat across sites, but visual inspection suggests that this relationship is present to some degree in each site individually.

First, I’ll look at this relationship considering all sites in the same analysis (standardizing scores collapsing across all sites, to maintain the pattern fo general differences in Porosity and Spiritual Experience across sites):

Relationship between porosity and spiritual experience, comparing across sites [model: lm(por_score_std_collapse ~ spex_score_propall_std_collapse * epi_ctry, d_por_spex_base_q2to23_propall)]
parameter b standard error t p significant
(Intercept) 0.03 0.02 1.40 0.161
spex_score_propall_std_collapse 0.40 0.02 18.95 <0.001 *
epi_ctrynonUS_US 0.10 0.01 12.15 <0.001 *
epi_ctryGHVT_THCH 0.64 0.02 27.05 <0.001 *
epi_ctryGH_VT 0.08 0.03 2.83 0.005 *
epi_ctryTH_CH -0.04 0.04 -0.95 0.345
spex_score_propall_std_collapse:epi_ctrynonUS_US -0.03 0.01 -2.84 0.005 *
spex_score_propall_std_collapse:epi_ctryGHVT_THCH -0.15 0.02 -6.18 <0.001 *
spex_score_propall_std_collapse:epi_ctryGH_VT -0.06 0.03 -2.51 0.012 *
spex_score_propall_std_collapse:epi_ctryTH_CH -0.07 0.04 -1.74 0.083

Including all of the data in a single analysis suggests that, collapsing across sites, the relationship between Porosity and Spiritual Experience scores is significantly positive (see “spex_score_propall_std” row in the table above). However, this relationship appears to be significantly weaker among participants outside of the US than it is among US participants (see “spex_score_propall_std:epi_ctrynonUS_US” row), significantly weaker among participants in Ghana and Vanuatu relative to participants in Thailand and China (see “spex_score_propall_std:epi_ctryGHVT_THCH” row), and significantly weaker among participants in Ghana relative to participants in Vanuatu (see “spex_score_propall_std:epi_ctryGH_VT” row). In other words, the relationship between Porosity and Spiritual Experience seems to have been strongest in the US and Chinese samples, weaker in the ni-Van and Thai samples, and weakest in the Ghanaian sample. (This is true even after accounting for overall differences in porosity and spiritual experience across sites.)

Next, I’ll look at this relationship considering each sites individually in its own analysis (standardizing scores within each site):

Relationship between porosity and spiritual experience, within each site separately [model: lm(por_score_std ~ spex_score_propall_std, d_por_spex_base_q2to23_propall %>% filter(epi_ctry == ...)]
parameter b standard error t p significant
US
(Intercept) 0.00 0.05 0.00 1
spex_score_propall_std 0.63 0.05 12.03 <0.001 *
Ghana
(Intercept) 0.00 0.06 0.00 1
spex_score_propall_std 0.29 0.06 4.75 <0.001 *
Thailand
(Intercept) 0.00 0.06 0.00 1
spex_score_propall_std 0.46 0.06 7.35 <0.001 *
China
(Intercept) 0.00 0.06 0.00 1
spex_score_propall_std 0.69 0.06 12.03 <0.001 *
Vanuatu
(Intercept) 0.00 0.06 0.00 1
spex_score_propall_std 0.49 0.06 7.75 <0.001 *

This analysis suggests that the relationship between Porosity and Spiritual Experience is signficantly positive in all five sites considered individually. The regression coefficients (“b” column in the table above) further confirm that the strength of this relationhip varied across sites: It was strongest in China and the US, middling in Vanuatu and Thailand, and weakest (but still significantly positive) in Ghana.

By charismatic status

From the plot, it looks like this relationship was similar across charismatic and non-charismatic participants (with the possible exception of Vanuatu, where it appears to be particularly strong among charismatics).

First, I’ll look at this relationship considering all sites in the same analysis (standardizing scores collapsing across all sites, to maintain the pattern fo general differences in Porosity and Spiritual Experience across sites):

Relationship between porosity and spiritual experience, comparing across sites and charismatic status [model: lm(por_score_std_collapse ~ spex_score_propall_std_collapse * epi_ctry * epi_charc, d_por_spex_base_q2to23_propall)]
parameter b standard error t p significant
(Intercept) -0.06 0.02 -2.63 0.009 *
spex_score_propall_std_collapse 0.32 0.02 13.31 <0.001 *
epi_ctrynonUS_US 0.09 0.01 9.26 <0.001 *
epi_ctryGHVT_THCH 0.74 0.03 28.68 <0.001 *
epi_ctryGH_VT 0.07 0.03 2.31 0.021 *
epi_ctryTH_CH -0.11 0.04 -2.67 0.008 *
epi_charccharc_non 0.35 0.05 7.15 <0.001 *
spex_score_propall_std_collapse:epi_ctrynonUS_US -0.05 0.01 -4.47 <0.001 *
spex_score_propall_std_collapse:epi_ctryGHVT_THCH -0.06 0.03 -2.29 0.022 *
spex_score_propall_std_collapse:epi_ctryGH_VT -0.05 0.03 -1.48 0.14
spex_score_propall_std_collapse:epi_ctryTH_CH -0.15 0.05 -3.36 <0.001 *
spex_score_propall_std_collapse:epi_charccharc_non 0.16 0.06 2.74 0.006 *
epi_ctrynonUS_US:epi_charccharc_non 0.05 0.02 2.15 0.032 *
epi_ctryGHVT_THCH:epi_charccharc_non -0.40 0.06 -7.11 <0.001 *
epi_ctryGH_VT:epi_charccharc_non 0.03 0.06 0.56 0.578
epi_ctryTH_CH:epi_charccharc_non 0.05 0.10 0.51 0.608
spex_score_propall_std_collapse:epi_ctrynonUS_US:epi_charccharc_non 0.07 0.03 2.73 0.006 *
spex_score_propall_std_collapse:epi_ctryGHVT_THCH:epi_charccharc_non -0.19 0.07 -2.79 0.005 *
spex_score_propall_std_collapse:epi_ctryGH_VT:epi_charccharc_non -0.05 0.05 -1.04 0.3
spex_score_propall_std_collapse:epi_ctryTH_CH:epi_charccharc_non -0.26 0.13 -2.02 0.043 *

Among other things, this analysis suggests that the relationship between Porosity and Spiritual Experience is significantly positive among non-charismatics, collapsing across sites (see “spex_score_propall_std” row in the table above). In addition to varying across sites, the strength of this relationship also varied with charismatic status: It was particularly strong among charismatics relative to non-charismatic (see “spex_score_propall_std_collapse:epi_charccharc_non” row).

Next, I’ll look at this relationship considering each sites individually in its own analysis (standardizing scores within each site):

Relationship between porosity and spiritual experience, within each site separately [model: lm(por_score_std ~ spex_score_propall_std * epi_charc, d_por_spex_base_q2to23_propall %>% filter(epi_ctry == ...)]
parameter b standard error t p significant
US
(Intercept) -0.03 0.06 -0.59 0.559
spex_score_propall_std 0.62 0.06 10.24 <0.001 *
epi_charccharc_non 0.27 0.16 1.66 0.099
spex_score_propall_std:epi_charccharc_non -0.15 0.15 -0.96 0.338
Ghana
(Intercept) -0.01 0.08 -0.19 0.851
spex_score_propall_std 0.30 0.09 3.51 <0.001 *
epi_charccharc_non 0.05 0.13 0.35 0.73
spex_score_propall_std:epi_charccharc_non -0.02 0.13 -0.17 0.862
Thailand
(Intercept) -0.38 0.06 -6.40 <0.001 *
spex_score_propall_std 0.18 0.06 2.95 0.004 *
epi_charccharc_non 1.27 0.13 10.01 <0.001 *
spex_score_propall_std:epi_charccharc_non 0.17 0.12 1.40 0.163
China
(Intercept) -0.07 0.05 -1.31 0.191
spex_score_propall_std 0.57 0.06 10.13 <0.001 *
epi_charccharc_non 0.29 0.27 1.08 0.281
spex_score_propall_std:epi_charccharc_non 0.80 0.20 3.99 <0.001 *
Vanuatu
(Intercept) -0.03 0.07 -0.35 0.73
spex_score_propall_std 0.43 0.08 5.66 <0.001 *
epi_charccharc_non 0.04 0.14 0.26 0.798
spex_score_propall_std:epi_charccharc_non 0.16 0.13 1.16 0.246

This analysis suggests that the relationship between Porosity and Spiritual Experience is signficantly positive among non-charismatics in all five sites considered individually. The strength of this relationship only seems to vary by charismatic status in China (puzzling, not in Vanuatu, though that’s what it looked like from the plot).

Considering charismatics alone

Relationship between porosity and spiritual experience, comparing across sites, considering charismatics only [model: lm(por_score_std_collapse ~ spex_score_propall_std_collapse * epi_ctry, d_por_spex_base_q2to23_propall %>% filter(...))]
parameter b standard error t p significant
(Intercept) 0.32 0.04 8.96 <0.001 *
spex_score_propall_std_collapse 0.30 0.04 7.49 <0.001 *
epi_ctrynonUS_US 0.19 0.02 8.68 <0.001 *
epi_ctryGHVT_TH 0.25 0.03 8.61 <0.001 *
epi_ctryGH_VT 0.11 0.05 2.17 0.031 *
spex_score_propall_std_collapse:epi_ctrynonUS_US -0.03 0.03 -0.98 0.33
spex_score_propall_std_collapse:epi_ctryGHVT_TH -0.03 0.04 -0.85 0.395
spex_score_propall_std_collapse:epi_ctryGH_VT -0.10 0.04 -2.58 0.011 *

The relationship between porosity and spiritual experience is significantly positive among charismatics considered alone (excluding the 11 charismatics from China, since this is such a small sample). This relationship is stronger among charismatics in Vanuatu than among charismatics in Ghana.

Relationship between porosity and spiritual experience, within each site separately [model: lm(por_score_std ~ spex_score_propall_std, d_por_spex_base_q2to23_propall %>% filter(epi_ctry == ..., epi_charc == 'charismatic')]
parameter b standard error t p significant
US
(Intercept) 0.23 0.13 1.72 0.092
spex_score_propall_std 0.48 0.13 3.78 <0.001 *
Ghana
(Intercept) 0.03 0.11 0.29 0.774
spex_score_propall_std 0.28 0.09 2.95 0.004 *
Thailand
(Intercept) 0.90 0.13 7.01 <0.001 *
spex_score_propall_std 0.35 0.12 3.04 0.004 *
Vanuatu
(Intercept) 0.01 0.09 0.11 0.916
spex_score_propall_std 0.59 0.09 6.74 <0.001 *

And it’s significantly positive in each sample of charismatics, considered alone (again, ignoring China).

By religiosity

What happens when we include self-reported religiosity in these models?

First, I’ll look at this relationship considering all sites in the same analysis (standardizing scores collapsing across all sites, to maintain the pattern fo general differences in Porosity and Spiritual Experience across sites):

Relationship between porosity and spiritual experience, comparing across sites and charismatic status, taking into account self-reported religiosity [model: lm(por_score_std_collapse ~ spex_score_propall_std_collapse * epi_ctry * epi_charc * epi_demo_howr_num, d_por_spex_base_q2to23_propall)]
parameter b standard error t p significant
(Intercept) -0.08 0.03 -2.72 0.007 *
spex_score_propall_std_collapse 0.25 0.03 7.42 <0.001 *
epi_ctrynonUS_US 0.08 0.01 7.49 <0.001 *
epi_ctryGHVT_THCH 0.71 0.03 20.49 <0.001 *
epi_ctryGH_VT -0.03 0.05 -0.52 0.604
epi_ctryTH_CH -0.13 0.05 -2.68 0.007 *
epi_charccharc_non 0.21 0.12 1.73 0.085
epi_demo_howr_num 0.12 0.03 3.69 <0.001 *
spex_score_propall_std_collapse:epi_ctrynonUS_US -0.04 0.01 -2.85 0.004 *
spex_score_propall_std_collapse:epi_ctryGHVT_THCH 0.04 0.04 1.03 0.303
spex_score_propall_std_collapse:epi_ctryGH_VT 0.01 0.06 0.16 0.876
spex_score_propall_std_collapse:epi_ctryTH_CH -0.18 0.06 -3.14 0.002 *
spex_score_propall_std_collapse:epi_charccharc_non 0.16 0.12 1.31 0.192
epi_ctrynonUS_US:epi_charccharc_non 0.04 0.04 0.88 0.381
epi_ctryGHVT_THCH:epi_charccharc_non -0.27 0.15 -1.84 0.066
epi_ctryGH_VT:epi_charccharc_non 0.19 0.08 2.27 0.023 *
epi_ctryTH_CH:epi_charccharc_non 0.42 0.28 1.51 0.132
spex_score_propall_std_collapse:epi_demo_howr_num -0.09 0.04 -2.35 0.019 *
epi_ctrynonUS_US:epi_demo_howr_num -0.02 0.01 -1.31 0.19
epi_ctryGHVT_THCH:epi_demo_howr_num 0.01 0.04 0.13 0.898
epi_ctryGH_VT:epi_demo_howr_num 0.16 0.06 2.75 0.006 *
epi_ctryTH_CH:epi_demo_howr_num -0.13 0.05 -2.38 0.018 *
epi_charccharc_non:epi_demo_howr_num 0.10 0.13 0.79 0.431
spex_score_propall_std_collapse:epi_ctrynonUS_US:epi_charccharc_non -0.01 0.04 -0.29 0.771
spex_score_propall_std_collapse:epi_ctryGHVT_THCH:epi_charccharc_non -0.25 0.15 -1.69 0.092
spex_score_propall_std_collapse:epi_ctryGH_VT:epi_charccharc_non -0.05 0.09 -0.60 0.547
spex_score_propall_std_collapse:epi_ctryTH_CH:epi_charccharc_non 0.05 0.28 0.19 0.846
spex_score_propall_std_collapse:epi_ctrynonUS_US:epi_demo_howr_num -0.02 0.01 -1.86 0.063
spex_score_propall_std_collapse:epi_ctryGHVT_THCH:epi_demo_howr_num 0.01 0.04 0.29 0.775
spex_score_propall_std_collapse:epi_ctryGH_VT:epi_demo_howr_num -0.10 0.07 -1.55 0.121
spex_score_propall_std_collapse:epi_ctryTH_CH:epi_demo_howr_num -0.15 0.06 -2.58 0.01 *
spex_score_propall_std_collapse:epi_charccharc_non:epi_demo_howr_num 0.20 0.14 1.40 0.163
epi_ctrynonUS_US:epi_charccharc_non:epi_demo_howr_num 0.04 0.04 0.98 0.328
epi_ctryGHVT_THCH:epi_charccharc_non:epi_demo_howr_num -0.15 0.15 -0.98 0.327
epi_ctryGH_VT:epi_charccharc_non:epi_demo_howr_num -0.24 0.10 -2.43 0.015 *
epi_ctryTH_CH:epi_charccharc_non:epi_demo_howr_num -0.14 0.29 -0.47 0.635
spex_score_propall_std_collapse:epi_ctrynonUS_US:epi_charccharc_non:epi_demo_howr_num 0.13 0.05 2.68 0.008 *
spex_score_propall_std_collapse:epi_ctryGHVT_THCH:epi_charccharc_non:epi_demo_howr_num -0.14 0.17 -0.79 0.428
spex_score_propall_std_collapse:epi_ctryGH_VT:epi_charccharc_non:epi_demo_howr_num 0.06 0.11 0.58 0.56
spex_score_propall_std_collapse:epi_ctryTH_CH:epi_charccharc_non:epi_demo_howr_num -0.03 0.33 -0.09 0.925

Among other things, this analysis suggests that the relationship between Porosity and Spiritual Experience is significantly positive among non-charismatics, collapsing across sites, even after controlling for religiosity (see “spex_score_propall_std” row in the table above)—but it may have been weaker among more religious participants (see “spex_score_propall_std_collapse:epi_demo_howr_num” row).

Next, I’ll look at this relationship considering each sites individually in its own analysis (standardizing scores within each site):

Relationship between porosity and spiritual experience, accounting for religiosity, within each site separately [model: lm(por_score_std ~ spex_score_propall_std * epi_charc * epi_demo_how_num, d_por_spex_base_q2to23_propall %>% filter(epi_ctry == ...)]
parameter b standard error t p significant
US
(Intercept) -0.01 0.06 -0.22 0.824
spex_score_propall_std 0.49 0.07 7.25 <0.001 *
epi_charccharc_non 0.01 0.30 0.05 0.963
epi_demo_howr_num 0.29 0.07 4.31 <0.001 *
spex_score_propall_std:epi_charccharc_non 0.28 0.24 1.18 0.239
spex_score_propall_std:epi_demo_howr_num 0.01 0.07 0.10 0.918
epi_charccharc_non:epi_demo_howr_num 0.00 0.34 0.00 0.997
spex_score_propall_std:epi_charccharc_non:epi_demo_howr_num -0.46 0.27 -1.68 0.095
Ghana
(Intercept) 0.00 0.08 0.03 0.972
spex_score_propall_std 0.26 0.09 3.00 0.003 *
epi_charccharc_non 0.02 0.13 0.13 0.894
epi_demo_howr_num 0.22 0.09 2.44 0.015 *
spex_score_propall_std:epi_charccharc_non 0.01 0.13 0.10 0.918
spex_score_propall_std:epi_demo_howr_num -0.18 0.09 -2.04 0.042 *
epi_charccharc_non:epi_demo_howr_num -0.17 0.13 -1.33 0.186
spex_score_propall_std:epi_charccharc_non:epi_demo_howr_num 0.23 0.12 1.95 0.052
Thailand
(Intercept) -0.06 0.06 -1.04 0.298
spex_score_propall_std 0.39 0.07 5.27 <0.001 *
epi_charccharc_non -0.35 0.83 -0.42 0.675
epi_demo_howr_num 0.33 0.06 5.31 <0.001 *
spex_score_propall_std:epi_charccharc_non 0.00 0.75 0.00 0.996
spex_score_propall_std:epi_demo_howr_num 0.03 0.06 0.59 0.554
epi_charccharc_non:epi_demo_howr_num 0.03 0.61 0.05 0.958
spex_score_propall_std:epi_charccharc_non:epi_demo_howr_num 0.54 0.49 1.10 0.275
China
(Intercept) -0.37 0.06 -6.36 <0.001 *
spex_score_propall_std 0.22 0.06 3.55 <0.001 *
epi_charccharc_non 1.24 0.14 9.16 <0.001 *
epi_demo_howr_num 0.01 0.06 0.09 0.927
spex_score_propall_std:epi_charccharc_non 0.09 0.13 0.73 0.468
spex_score_propall_std:epi_demo_howr_num -0.18 0.05 -3.20 0.002 *
epi_charccharc_non:epi_demo_howr_num 0.10 0.13 0.77 0.444
spex_score_propall_std:epi_charccharc_non:epi_demo_howr_num 0.28 0.12 2.28 0.024 *
Vanuatu
(Intercept) -0.02 0.08 -0.29 0.774
spex_score_propall_std 0.43 0.08 5.43 <0.001 *
epi_charccharc_non -0.03 0.16 -0.19 0.847
epi_demo_howr_num -0.04 0.08 -0.50 0.616
spex_score_propall_std:epi_charccharc_non 0.07 0.15 0.51 0.611
spex_score_propall_std:epi_demo_howr_num 0.01 0.10 0.07 0.941
epi_charccharc_non:epi_demo_howr_num 0.29 0.18 1.60 0.112
spex_score_propall_std:epi_charccharc_non:epi_demo_howr_num 0.13 0.18 0.69 0.491

This analysis suggests that the relationship between Porosity and Spiritual Experience is signficantly positive among non-charismatics in all five sites considered individually, even after accounting for self-reported religiosity. The impact of reliosity on the strength of this relationship appears to vary across sites (though there’s only limited evidence of this from the previous analysis): it’s not significant in the US, Thai, or ni-Van samples alone, but significantly weaker among more religious participants in Ghana and China. I would take this with a big grain of salt.

Considering first five “beings” for all sites

Again, it is clear from the plot that there is a general relationship between Porosity and Spiritual Experience scores, and the strength of this relationships appears to vary somewhat across sites.

First, I’ll look at this relationship considering all sites in the same analysis (standardizing scores collapsing across all sites, to maintain the pattern fo general differences in Porosity and Spiritual Experience across sites):

Relationship between porosity and spiritual experience, comparing across sites [model: lm(por_score_std_collapse ~ spex_score_first5_std_collapse * epi_ctry, d_por_spex_base_q2to23_first5)]
parameter b standard error t p significant
(Intercept) 0.03 0.02 1.32 0.189
spex_score_first5_std_collapse 0.39 0.02 18.85 <0.001 *
epi_ctrynonUS_US 0.10 0.01 11.93 <0.001 *
epi_ctryGHVT_THCH 0.65 0.02 27.02 <0.001 *
epi_ctryGH_VT 0.08 0.03 2.87 0.004 *
epi_ctryTH_CH -0.06 0.04 -1.51 0.131
spex_score_first5_std_collapse:epi_ctrynonUS_US -0.03 0.01 -3.05 0.002 *
spex_score_first5_std_collapse:epi_ctryGHVT_THCH -0.13 0.02 -5.66 <0.001 *
spex_score_first5_std_collapse:epi_ctryGH_VT -0.06 0.03 -2.34 0.02 *
spex_score_first5_std_collapse:epi_ctryTH_CH -0.11 0.04 -2.72 0.007 *

This analysis is virtually identical to the parallel analysis using proportion scores, above—with the additional suggestion that the relationship was significantly weaker among participants in Thailand than participants in China (see “spex_score_first5_std:epi_ctryTH_CH” row in table above).

Next, I’ll look at this relationship considering each sites individually in its own analysis (standardizing scores within each site):

Relationship between porosity and spiritual experience, within each site separately [model: lm(por_score_std ~ spex_score_first5_std, d_por_spex_base_q2to23_first5 %>% filter(epi_ctry == ...)]
parameter b standard error t p significant
US
(Intercept) 0.00 0.05 0.00 1
spex_score_first5_std 0.62 0.05 11.91 <0.001 *
Ghana
(Intercept) 0.00 0.06 0.00 1
spex_score_first5_std 0.30 0.06 4.88 <0.001 *
Thailand
(Intercept) 0.00 0.06 0.00 1
spex_score_first5_std 0.44 0.06 7.02 <0.001 *
China
(Intercept) 0.00 0.06 0.00 1
spex_score_first5_std 0.69 0.06 12.02 <0.001 *
Vanuatu
(Intercept) 0.00 0.06 0.00 1
spex_score_first5_std 0.49 0.06 7.82 <0.001 *

As with the analysis of proportion scores, this analysis suggests that the relationship between Porosity and Spiritual Experience is signficantly positive in all five sites considered individually, and the regression coefficients (“b” column in the table above) further confirm that this relationhip was strongest in China and the US, middling in Vanuatu and Thailand, and weakest (but still significantly positive) in Ghana.

Since this analysis was so similar to the analysis considering all beings, I will not bother breaking things down by charismatic status at this point.

Spiritual experience follow-up questions

Frequency questions (“How often…?”)

Questions #2-10

Questions #11-15 (+ more for Thailand)


|==================================               | 70% ~1 s remaining     
|===================================              | 73% ~1 s remaining     
|=====================================            | 76% ~1 s remaining     
|=======================================          | 80% ~1 s remaining     
|========================================         | 83% ~0 s remaining     
|==========================================       | 86% ~0 s remaining     
|===========================================      | 89% ~0 s remaining     
|============================================     | 90% ~0 s remaining     
|=============================================    | 93% ~0 s remaining     
|==============================================   | 94% ~0 s remaining     
|===============================================  | 97% ~0 s remaining     
|=================================================|100% ~0 s remaining     


|=========================                        | 51% ~2 s remaining     
|=========================                        | 53% ~2 s remaining     
|==========================                       | 54% ~2 s remaining     
|===========================                      | 56% ~2 s remaining     
|============================                     | 57% ~2 s remaining     
|============================                     | 59% ~2 s remaining     
|=============================                    | 60% ~2 s remaining     
|==============================                   | 61% ~2 s remaining     
|==============================                   | 63% ~2 s remaining     
|===============================                  | 64% ~2 s remaining     
|================================                 | 66% ~2 s remaining     
|================================                 | 67% ~1 s remaining     
|=================================                | 69% ~1 s remaining     
|==================================               | 70% ~1 s remaining     
|===================================              | 73% ~1 s remaining     
|=====================================            | 76% ~1 s remaining     
|=====================================            | 77% ~1 s remaining     
|=======================================          | 80% ~1 s remaining     
|=======================================          | 81% ~1 s remaining     
|========================================         | 83% ~1 s remaining     
|=========================================        | 84% ~1 s remaining     
|==========================================       | 86% ~1 s remaining     
|===========================================      | 89% ~1 s remaining     
|============================================     | 90% ~0 s remaining     
|============================================     | 91% ~0 s remaining     
|=============================================    | 93% ~0 s remaining     
|==============================================   | 94% ~0 s remaining     
|==============================================   | 96% ~0 s remaining     
|===============================================  | 97% ~0 s remaining     
|================================================ | 99% ~0 s remaining     
|=================================================|100% ~0 s remaining     


|=====================================            | 77% ~1 s remaining     
|======================================           | 80% ~1 s remaining     
|========================================         | 82% ~0 s remaining     
|========================================         | 83% ~0 s remaining     
|=========================================        | 84% ~0 s remaining     
|=========================================        | 85% ~0 s remaining     
|==========================================       | 86% ~0 s remaining     
|==========================================       | 88% ~0 s remaining     
|===========================================      | 89% ~0 s remaining     
|===========================================      | 90% ~0 s remaining     
|============================================     | 91% ~0 s remaining     
|=============================================    | 92% ~0 s remaining     
|=============================================    | 93% ~0 s remaining     
|==============================================   | 94% ~0 s remaining     
|===============================================  | 98% ~0 s remaining     
|================================================ | 99% ~0 s remaining     

LS0tCnRpdGxlOiAiU3Bpcml0dWFsIGVwaWRlbWlvbG9neSBBTkFMWVNJUyAoS1cgZmlyc3QgcGFzcykiCnN1YnRpdGxlOiAiTGFzdCB1cGRhdGVkOiAyMDE5LTA0LTE5IgpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazoKICAgIHRvYzogeWVzCiAgICB0b2NfZGVwdGg6IDQKICAgIHRvY19mbG9hdDogeWVzCmFsd2F5c19hbGxvd19odG1sOiB5ZXMKLS0tCgpUaGlzIGlzIEthcmEncyBmaXJzdCBwYXNzIGF0IGFuYWx5emluZyB0aGUgU3Bpcml0dWFsIEVwaWRlbWlvbG9neSBkYXRhICh3aXRoIGRhdGEgZnJvbSAyMDE5LTAzLTA4KS4gKE5vdGU6IFBERiBwcmludGVkIHBvcnRyYWl0LCA5MCUgem9vbSwgZGVmYXVsdCBtYXJnaW5zLikKCmBgYHtyIGdsb2JhbF9vcHRpb25zLCBpbmNsdWRlID0gRn0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjY3LAogICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZSA9IEYsIGVjaG8gPSBGKQpgYGAKCmBgYHtyfQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShsYW5nY29nKQpsaWJyYXJ5KHBzeWNoKQpsaWJyYXJ5KHJlYWR4bCkKbGlicmFyeShjb3dwbG90KQpsaWJyYXJ5KGxtZTQpCmxpYnJhcnkobG1lclRlc3QpCmxpYnJhcnkoa2FibGVFeHRyYSkKbGlicmFyeShsdWJyaWRhdGUpCgp0aGVtZV9zZXQodGhlbWVfYncoKSkKYGBgCgpgYGB7cn0KcmVjb2RlX2N0cnlfZnVuIDwtIGZ1bmN0aW9uKHgpewogIHggPC0gZmFjdG9yKHgsIGxldmVscyA9IGMoIlVTIiwgIkdoYW5hIiwgIlRoYWlsYW5kIiwgIkNoaW5hIiwgIlZhbnVhdHUiKSkKICByZXR1cm4oeCkKfQoKcmVjb2RlX2NoYXJjX2Z1biA8LSBmdW5jdGlvbih4KXsKICB4IDwtIGZhY3Rvcih4LCBsZXZlbHMgPSBjKCIwIiwgIjEiKSwgCiAgICAgICAgICAgICAgbGFiZWxzID0gYygibm90IGNoYXJpc21hdGljIiwgImNoYXJpc21hdGljIikpCiAgcmV0dXJuKHgpCn0KYGBgCgpgYGB7cn0KZF9kZW1vIDwtIHJlYWQuY3N2KCIuL2RhdGFfd3JhbmdsZWQvZF9kZW1vLmNzdiIsIHJvdy5uYW1lcyA9ICJYIikgJT4lCiAgbXV0YXRlKGVwaV9jdHJ5ID0gcmVjb2RlX2N0cnlfZnVuKGVwaV9jdHJ5KSkKYGBgCgpgYGB7cn0KY2hhcmNfY291bnRzIDwtIGRfZGVtbyAlPiUKICAgIG11dGF0ZShlcGlfY2hhcmMgPSByZWNvZGVfY2hhcmNfZnVuKGVwaV9jaGFyYykpICU+JQogICAgZmlsdGVyKCFpcy5uYShlcGlfY2hhcmMpKSAlPiUgY291bnQoZXBpX2N0cnksIGVwaV9jaGFyYykKYGBgCgpgYGB7cn0KZF9wb3IgPC0gcmVhZC5jc3YoIi4vZGF0YV93cmFuZ2xlZC9kX3Bvci5jc3YiLCByb3cubmFtZXMgPSAiWCIpICU+JQogIGxlZnRfam9pbihkX2RlbW8gJT4lIGRpc3RpbmN0KGVwaV9zdWJqLCBlcGlfY2hhcmMsIGVwaV9kZW1vX2hvd3JfbnVtKSkgJT4lCiAgbXV0YXRlKGVwaV9jdHJ5ID0gcmVjb2RlX2N0cnlfZnVuKGVwaV9jdHJ5KSwKICAgICAgICAgZXBpX2NoYXJjID0gcmVjb2RlX2NoYXJjX2Z1bihlcGlfY2hhcmMpKQoKZF9wb3Jfc2NvcmVkIDwtIHJlYWQuY3N2KCIuL2RhdGFfd3JhbmdsZWQvZF9wb3Jfc2NvcmVkLmNzdiIsIHJvdy5uYW1lcyA9ICJYIikgJT4lCiAgbGVmdF9qb2luKGRfZGVtbyAlPiUgZGlzdGluY3QoZXBpX3N1YmosIGVwaV9jaGFyYywgZXBpX2RlbW9faG93cl9udW0pKSAlPiUKICBtdXRhdGUoZXBpX2N0cnkgPSByZWNvZGVfY3RyeV9mdW4oZXBpX2N0cnkpLAogICAgICAgICBlcGlfY2hhcmMgPSByZWNvZGVfY2hhcmNfZnVuKGVwaV9jaGFyYykpCmBgYAoKYGBge3J9CmRfc3BleCA8LSByZWFkLmNzdigiLi9kYXRhX3dyYW5nbGVkL2Rfc3BleC5jc3YiLCByb3cubmFtZXMgPSAiWCIpICU+JQogIGxlZnRfam9pbihkX2RlbW8gJT4lIGRpc3RpbmN0KGVwaV9zdWJqLCBlcGlfY2hhcmMsIGVwaV9kZW1vX2hvd3JfbnVtKSkgJT4lCiAgbXV0YXRlKGVwaV9jdHJ5ID0gcmVjb2RlX2N0cnlfZnVuKGVwaV9jdHJ5KSwKICAgICAgICAgZXBpX2NoYXJjID0gcmVjb2RlX2NoYXJjX2Z1bihlcGlfY2hhcmMpKQpgYGAKCmBgYHtyfQpkX3ByYXllciA8LSByZWFkLmNzdigiLi9kYXRhX3dyYW5nbGVkL2RfcHJheWVyLmNzdiIsIHJvdy5uYW1lcyA9ICJYIikgJT4lCiAgbGVmdF9qb2luKGRfZGVtbyAlPiUgZGlzdGluY3QoZXBpX3N1YmosIGVwaV9jaGFyYywgZXBpX2RlbW9faG93cl9udW0pKSAlPiUKICBtdXRhdGUoZXBpX2N0cnkgPSByZWNvZGVfY3RyeV9mdW4oZXBpX2N0cnkpLAogICAgICAgICBlcGlfY2hhcmMgPSByZWNvZGVfY2hhcmNfZnVuKGVwaV9jaGFyYykpCmBgYAoKYGBge3J9CmRfc3BleF9iYXNlX3EydG8yMyA8LSByZWFkLmNzdigiLi9kYXRhX3dyYW5nbGVkL2Rfc3BleF9iYXNlX3EydG8yMy5jc3YiLCByb3cubmFtZXMgPSAiWCIpICU+JQogIGxlZnRfam9pbihkX2RlbW8gJT4lIGRpc3RpbmN0KGVwaV9zdWJqLCBlcGlfY2hhcmMsIGVwaV9kZW1vX2hvd3JfbnVtKSkgJT4lCiAgbXV0YXRlKGVwaV9jdHJ5ID0gcmVjb2RlX2N0cnlfZnVuKGVwaV9jdHJ5KSwKICAgICAgICAgZXBpX2NoYXJjID0gcmVjb2RlX2NoYXJjX2Z1bihlcGlfY2hhcmMpKQoKZF9zcGV4X2Jhc2VfcTJ0bzIzX3Njb3JlZF9wcm9wYWxsIDwtIHJlYWQuY3N2KCIuL2RhdGFfd3JhbmdsZWQvZF9zcGV4X2Jhc2VfcTJ0bzIzX3Njb3JlZF9wcm9wYWxsLmNzdiIsIHJvdy5uYW1lcyA9ICJYIikgJT4lCiAgbGVmdF9qb2luKGRfZGVtbyAlPiUgZGlzdGluY3QoZXBpX3N1YmosIGVwaV9jaGFyYywgZXBpX2RlbW9faG93cl9udW0pKSAlPiUKICBtdXRhdGUoZXBpX2N0cnkgPSByZWNvZGVfY3RyeV9mdW4oZXBpX2N0cnkpLAogICAgICAgICBlcGlfY2hhcmMgPSByZWNvZGVfY2hhcmNfZnVuKGVwaV9jaGFyYykpCgpkX3NwZXhfYmFzZV9xMnRvMjNfc2NvcmVkX2ZpcnN0NSA8LSByZWFkLmNzdigiLi9kYXRhX3dyYW5nbGVkL2Rfc3BleF9iYXNlX3EydG8yM19zY29yZWRfZmlyc3Q1LmNzdiIsIHJvdy5uYW1lcyA9ICJYIikgJT4lCiAgbGVmdF9qb2luKGRfZGVtbyAlPiUgZGlzdGluY3QoZXBpX3N1YmosIGVwaV9jaGFyYywgZXBpX2RlbW9faG93cl9udW0pKSAlPiUKICBtdXRhdGUoZXBpX2N0cnkgPSByZWNvZGVfY3RyeV9mdW4oZXBpX2N0cnkpLAogICAgICAgICBlcGlfY2hhcmMgPSByZWNvZGVfY2hhcmNfZnVuKGVwaV9jaGFyYykpCmBgYAoKYGBge3J9CmRfc3BleF9iYXNlX3EydG8xMCA8LSByZWFkLmNzdigiLi9kYXRhX3dyYW5nbGVkL2Rfc3BleF9iYXNlX3EydG8xMC5jc3YiLCByb3cubmFtZXMgPSAiWCIpICU+JQogIGxlZnRfam9pbihkX2RlbW8gJT4lIGRpc3RpbmN0KGVwaV9zdWJqLCBlcGlfY2hhcmMsIGVwaV9kZW1vX2hvd3JfbnVtKSkgJT4lCiAgbXV0YXRlKGVwaV9jdHJ5ID0gcmVjb2RlX2N0cnlfZnVuKGVwaV9jdHJ5KSwKICAgICAgICAgZXBpX2NoYXJjID0gcmVjb2RlX2NoYXJjX2Z1bihlcGlfY2hhcmMpKQoKZF9zcGV4X2Jhc2VfcTJ0bzEwX3Njb3JlZCA8LSByZWFkLmNzdigiLi9kYXRhX3dyYW5nbGVkL2Rfc3BleF9iYXNlX3EydG8xMF9zY29yZWQuY3N2Iiwgcm93Lm5hbWVzID0gIlgiKSAlPiUKICBsZWZ0X2pvaW4oZF9kZW1vICU+JSBkaXN0aW5jdChlcGlfc3ViaiwgZXBpX2NoYXJjLCBlcGlfZGVtb19ob3dyX251bSkpICU+JQogIG11dGF0ZShlcGlfY3RyeSA9IHJlY29kZV9jdHJ5X2Z1bihlcGlfY3RyeSksCiAgICAgICAgIGVwaV9jaGFyYyA9IHJlY29kZV9jaGFyY19mdW4oZXBpX2NoYXJjKSkKYGBgCgpgYGB7cn0KZF9zcGV4X2Jhc2VfcTExdG8xNSA8LSByZWFkLmNzdigiZGF0YV93cmFuZ2xlZC9kX3NwZXhfYmFzZV9xMTF0bzE1LmNzdiIsIHJvdy5uYW1lcyA9ICJYIikgJT4lCiAgbGVmdF9qb2luKGRfZGVtbyAlPiUgZGlzdGluY3QoZXBpX3N1YmosIGVwaV9jaGFyYywgZXBpX2RlbW9faG93cl9udW0pKSAlPiUKICBtdXRhdGUoZXBpX2N0cnkgPSByZWNvZGVfY3RyeV9mdW4oZXBpX2N0cnkpLAogICAgICAgICBlcGlfY2hhcmMgPSByZWNvZGVfY2hhcmNfZnVuKGVwaV9jaGFyYykpCgpkX3NwZXhfYmFzZV9xMTF0bzE1X3Njb3JlZCA8LSByZWFkLmNzdigiZGF0YV93cmFuZ2xlZC9kX3NwZXhfYmFzZV9xMTF0bzE1X3Njb3JlZC5jc3YiLCByb3cubmFtZXMgPSAiWCIpICU+JQogIGxlZnRfam9pbihkX2RlbW8gJT4lIGRpc3RpbmN0KGVwaV9zdWJqLCBlcGlfY2hhcmMsIGVwaV9kZW1vX2hvd3JfbnVtKSkgJT4lCiAgbXV0YXRlKGVwaV9jdHJ5ID0gcmVjb2RlX2N0cnlfZnVuKGVwaV9jdHJ5KSwKICAgICAgICAgZXBpX2NoYXJjID0gcmVjb2RlX2NoYXJjX2Z1bihlcGlfY2hhcmMpKQpgYGAKCmBgYHtyfQpkX3NwZXhfYmFzZV9xMTZ0bzIxIDwtIHJlYWQuY3N2KCJkYXRhX3dyYW5nbGVkL2Rfc3BleF9iYXNlX3ExNnRvMjEuY3N2Iiwgcm93Lm5hbWVzID0gIlgiKSAlPiUKICBsZWZ0X2pvaW4oZF9kZW1vICU+JSBkaXN0aW5jdChlcGlfc3ViaiwgZXBpX2NoYXJjLCBlcGlfZGVtb19ob3dyX251bSkpICU+JQogIG11dGF0ZShlcGlfY3RyeSA9IHJlY29kZV9jdHJ5X2Z1bihlcGlfY3RyeSksCiAgICAgICAgIGVwaV9jaGFyYyA9IHJlY29kZV9jaGFyY19mdW4oZXBpX2NoYXJjKSkKCmRfc3BleF9iYXNlX3ExNnRvMjFfc2NvcmVkIDwtIHJlYWQuY3N2KCJkYXRhX3dyYW5nbGVkL2Rfc3BleF9iYXNlX3ExNnRvMjFfc2NvcmVkLmNzdiIsIHJvdy5uYW1lcyA9ICJYIikgJT4lCiAgbGVmdF9qb2luKGRfZGVtbyAlPiUgZGlzdGluY3QoZXBpX3N1YmosIGVwaV9jaGFyYywgZXBpX2RlbW9faG93cl9udW0pKSAlPiUKICBtdXRhdGUoZXBpX2N0cnkgPSByZWNvZGVfY3RyeV9mdW4oZXBpX2N0cnkpLAogICAgICAgICBlcGlfY2hhcmMgPSByZWNvZGVfY2hhcmNfZnVuKGVwaV9jaGFyYykpCmBgYAoKYGBge3J9CmRfc3BleF9iYXNlX3EyMnRvMjMgPC0gcmVhZC5jc3YoImRhdGFfd3JhbmdsZWQvZF9zcGV4X2Jhc2VfcTIydG8yMy5jc3YiLCByb3cubmFtZXMgPSAiWCIpICU+JQogIGxlZnRfam9pbihkX2RlbW8gJT4lIGRpc3RpbmN0KGVwaV9zdWJqLCBlcGlfY2hhcmMsIGVwaV9kZW1vX2hvd3JfbnVtKSkgJT4lCiAgbXV0YXRlKGVwaV9jdHJ5ID0gcmVjb2RlX2N0cnlfZnVuKGVwaV9jdHJ5KSwKICAgICAgICAgZXBpX2NoYXJjID0gcmVjb2RlX2NoYXJjX2Z1bihlcGlfY2hhcmMpKQoKZF9zcGV4X2Jhc2VfcTIydG8yM19zY29yZWQgPC0gcmVhZC5jc3YoImRhdGFfd3JhbmdsZWQvZF9zcGV4X2Jhc2VfcTIydG8yM19zY29yZWQuY3N2Iiwgcm93Lm5hbWVzID0gIlgiKSAlPiUKICBsZWZ0X2pvaW4oZF9kZW1vICU+JSBkaXN0aW5jdChlcGlfc3ViaiwgZXBpX2NoYXJjLCBlcGlfZGVtb19ob3dyX251bSkpICU+JQogIG11dGF0ZShlcGlfY3RyeSA9IHJlY29kZV9jdHJ5X2Z1bihlcGlfY3RyeSksCiAgICAgICAgIGVwaV9jaGFyYyA9IHJlY29kZV9jaGFyY19mdW4oZXBpX2NoYXJjKSkKYGBgCgpgYGB7cn0KdmFyX2tleSA8LSByZWFkX2V4Y2VsKCIuLi9TcGlyaXR1YWwgRXBpZGVtaW9sb2d5X0NvZGVkIERhdGEueGxzeCIsCiAgICAgICAgICAgICAgICAgICAgICBzaGVldCA9IDQpCgp2YXJfa2V5X2ZyZXEgPC0gdmFyX2tleSAlPiUKICBmaWx0ZXIoZ3JlcGwoImhvdyBvZnRlbiIsIHRvbG93ZXIoUVVFU1RJT04pKSkgJT4lCiAgbXV0YXRlKHF1ZXN0aW9uID0gZ3N1YigiXy4kIiwgIiIsIFZBUklBQkxFKSkgJT4lCiAgc2VsZWN0KHF1ZXN0aW9uLCBRVUVTVElPTikgJT4lCiAgcmVuYW1lKHF0ZXh0MiA9IFFVRVNUSU9OKSAlPiUKICBtdXRhdGUocXRleHQyID0gZ3N1YigiIC0gTmV2ZXIuKiQiLCAiIiwgcXRleHQyKSkgJT4lCiAgbXV0YXRlKHF0ZXh0MiA9IGdzdWIoIiAtIE9uY2UuKiQiLCAiIiwgcXRleHQyKSkgJT4lCiAgbXV0YXRlKHF0ZXh0MiA9IGdzdWIoIiAtIEF0IGxlYXN0LiokIiwgIiIsIHF0ZXh0MikpICU+JQogIG11dGF0ZShxdGV4dDIgPSBnc3ViKCIgLSBBIGxlYXN0LiokIiwgIiIsIHF0ZXh0MikpICU+JQogIG11dGF0ZShxdGV4dDIgPSBnc3ViKCIgLSBFdmVuIG1vcmUuKiQiLCAiIiwgcXRleHQyKSkgJT4lCiAgbXV0YXRlKHF0ZXh0MiA9IGdzdWIoIiAtIE1pc3NpbmcuKiQiLCAiIiwgcXRleHQyKSkgJT4lCiAgZGlzdGluY3QoKQpgYGAKCmBgYHtyfQpkX3NwZXhfZnUgPC0gZF9zcGV4ICU+JQogIGZpbHRlcighcXVlc3Rpb24gJWluJSBsZXZlbHMoZF9zcGV4X2Jhc2VfcTJ0bzIzJHF1ZXN0aW9uKSkgJT4lCiAgZmlsdGVyKCFxdWVzdGlvbiAlaW4lIGxldmVscyhkX3ByYXllciRxdWVzdGlvbikpICU+JQogIG11dGF0ZShxdWVzdGlvbiA9IGZhY3RvcihxdWVzdGlvbikpICU+JQogIGRpc3RpbmN0KCkgJT4lCiAgbGVmdF9qb2luKHZhcl9rZXlfZnJlcSkgJT4lCiAgbXV0YXRlKHF1ZXN0aW9uX3RleHQgPSBpZmVsc2UoIWlzLm5hKHF0ZXh0MiksIGFzLmNoYXJhY3RlcihxdGV4dDIpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcy5jaGFyYWN0ZXIocXVlc3Rpb25fdGV4dCkpKSAlPiUKICBzZWxlY3QoLXF0ZXh0MikKYGBgCgpgYGB7cn0KIyBlZmZlY3QtY29kZSBieSBkZWZhdWx0CmNvbnRyYXN0cyhkX3BvciRlcGlfY3RyeSkgPC0gY29udHIuc3VtKDUpCmNvbnRyYXN0cyhkX3BvciRlcGlfY2hhcmMpIDwtIGNvbnRyLnN1bSgyKQoKY29udHJhc3RzKGRfcG9yX3Njb3JlZCRlcGlfY3RyeSkgPC0gY29udHIuc3VtKDUpCmNvbnRyYXN0cyhkX3Bvcl9zY29yZWQkZXBpX2NoYXJjKSA8LSBjb250ci5zdW0oMikKCmNvbnRyYXN0cyhkX3ByYXllciRlcGlfY3RyeSkgPC0gY29udHIuc3VtKDUpCmNvbnRyYXN0cyhkX3ByYXllciRlcGlfY2hhcmMpIDwtIGNvbnRyLnN1bSgyKQoKY29udHJhc3RzKGRfc3BleF9iYXNlX3EydG8yMyRlcGlfY3RyeSkgPC0gY29udHIuc3VtKDUpCmNvbnRyYXN0cyhkX3NwZXhfYmFzZV9xMnRvMjNfc2NvcmVkX3Byb3BhbGwkZXBpX2NoYXJjKSA8LSBjb250ci5zdW0oMikKY29udHJhc3RzKGRfc3BleF9iYXNlX3EydG8yM19zY29yZWRfZmlyc3Q1JGVwaV9jaGFyYykgPC0gY29udHIuc3VtKDIpCgpjb250cmFzdHMoZF9zcGV4X2Jhc2VfcTJ0bzEwJGVwaV9jdHJ5KSA8LSBjb250ci5zdW0oNSkKY29udHJhc3RzKGRfc3BleF9iYXNlX3EydG8xMF9zY29yZWQkZXBpX2NoYXJjKSA8LSBjb250ci5zdW0oMikKCmNvbnRyYXN0cyhkX3NwZXhfYmFzZV9xMTF0bzE1JGVwaV9jdHJ5KSA8LSBjb250ci5zdW0oNSkKY29udHJhc3RzKGRfc3BleF9iYXNlX3ExMXRvMTVfc2NvcmVkJGVwaV9jaGFyYykgPC0gY29udHIuc3VtKDIpCgpjb250cmFzdHMoZF9zcGV4X2Jhc2VfcTE2dG8yMSRlcGlfY3RyeSkgPC0gY29udHIuc3VtKDUpCmNvbnRyYXN0cyhkX3NwZXhfYmFzZV9xMTZ0bzIxX3Njb3JlZCRlcGlfY2hhcmMpIDwtIGNvbnRyLnN1bSgyKQoKY29udHJhc3RzKGRfc3BleF9iYXNlX3EyMnRvMjMkZXBpX2N0cnkpIDwtIGNvbnRyLnN1bSg1KQpjb250cmFzdHMoZF9zcGV4X2Jhc2VfcTIydG8yM19zY29yZWQkZXBpX2NoYXJjKSA8LSBjb250ci5zdW0oMikKYGBgCgpgYGB7cn0KIyBhbHRlcm5hdGl2ZSBjb250cmFzdHMgZm9yIHNpdGUKY29udHJhc3RzX2N0cnlfZWZmIDwtIGNiaW5kKCJVUyIgPSBjKDEsIDAsIDAsIDAsIC0xKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJHSCIgPSBjKDAsIDEsIDAsIDAsIC0xKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUSCIgPSBjKDAsIDAsIDEsIDAsIC0xKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDSCIgPSBjKDAsIDAsIDAsIDEsIC0xKSkKCmNvbnRyYXN0c19jdHJ5X2R1bSA8LSBjYmluZCgiR0hfVVMiID0gYygwLCAxLCAwLCAwLCAwKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUSF9VUyIgPSBjKDAsIDAsIDEsIDAsIDApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNIX1VTIiA9IGMoMCwgMCwgMCwgMSwgMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVlRfVVMiID0gYygwLCAwLCAwLCAwLCAxKSkKCmNvbnRyYXN0c19jdHJ5X2N0ciA8LSBjYmluZCgibm9uVVNfVVMiID0gYygtNCwgMSwgMSwgMSwgMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiR0hWVF9USENIIiA9IGMoMCwgMSwgLTEsIC0xLCAxKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJHSF9WVCIgPSBjKDAsIDEsIDAsIDAsIC0xKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUSF9DSCIgPSBjKDAsIDAsIDEsIC0xLCAwKSkKCiMgYWx0ZXJuYXRpdmUgY29udHJhc3RzIGZvciBjaGFyaXNtYXRpYyBzdGF0dXMKY29udHJhc3RzX2NoYXJjX2VmZiA8LSBjYmluZCgiY2hhcmNfbm9uIiA9IGMoLTEsIDEpKQpjb250cmFzdHNfY2hhcmNfZHVtIDwtIGNiaW5kKCJjaGFyY19ub24iID0gYygwLCAxKSkKYGBgCgoKIyBQb3Jvc2l0eQoKRm9yIFNwaXJpdHVhbCBFcGlkZW1pb2xvZ3ksIHRoZSBQb3Jvc2l0eSBzY2FsZSBjb25zaXN0ZWQgb2YgMTYgYmFzaWMgaXRlbXMsIGFuZCBmb2xsb3ctdXAgcXVlc3Rpb25zIHRvIGEgc3Vic2V0IG9mIHRoZXNlIGl0ZW1zLiBGb3IgZWFjaCBvZiB0aGUgYmFzaWMgaXRlbXMsIHBhcnRpY2lwYW50cyBjb3VsZCByZXNwb25kIGJ5IHNheWluZyAiaXQgZG9lcyBub3QgaGFwcGVuIiAoc2NvcmVkIGFzIDApLCAiaXQgbWlnaHQgaGFwcGVuIiAoc2NvcmVkIGFzIDAuNSksIG9yICJpdCBkZWZpbml0ZWx5IGhhcHBlbnMiIChzY29yZWQgYXMgMSkuCgojIyBPdmVyYWxsIHNjb3JlcwoKRmlyc3QsIEknbGwgZXhhbWluZSBvdmVyYWxsICJzY29yZXMiIG9uIHRoaXMgc2NhbGUsIHRha2luZyBpbnRvIGFjY291bnQgb25seSB0aGUgYmFzaWMgaXRlbXMgKG5vdCB0aGUgZm9sbG93LXVwIHF1ZXN0aW9ucykuIFNjb3JlcyBjb3VsZCByYW5nZSBmcm9tIDAgKGVxdWl2YWxlbnQgdG8gc2F5aW5nICJpdCBkb2VzIG5vdCBoYXBwZW4iIGZvciBhbGwgMTYgaXRlbXMpIHRvIDE2IChlcXVpdmFsZW50IHRvIHNheWluZyAiaXQgZGVmaW5pdGVseSBoYXBwZW5zIiBmb3IgYWxsIDE2IGl0ZW1zKS4KCmBgYHtyfQpkX3Bvcl9zY29yZWRfbWIgPC0gZF9wb3Jfc2NvcmVkICU+JQogIGdyb3VwX2J5KGVwaV9jdHJ5KSAlPiUKICBtdWx0aV9ib290X3N0YW5kYXJkKCJzY29yZSIpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBtdXRhdGUoZXBpX2N0cnkgPSByZWNvZGVfY3RyeV9mdW4oZXBpX2N0cnkpKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42LCBpbmNsdWRlID0gVH0KcG9yX3Bsb3RfYSA8LSBnZ3Bsb3QoZF9wb3Jfc2NvcmVkLAogICAgICAgICAgICAgICAgICAgICBhZXMoeCA9IGVwaV9jdHJ5LCB5ID0gc2NvcmUsIGNvbG9yID0gZXBpX2N0cnkpKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCoxNiwgbHR5ID0gMiwgY29sb3IgPSAiYmxhY2siKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMC41KjE2LCBsdHkgPSAyLCBjb2xvciA9ICJibGFjayIpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAxKjE2LCBsdHkgPSAyLCBjb2xvciA9ICJibGFjayIpICsKICBnZW9tX2ppdHRlcihoZWlnaHQgPSAwLCB3aWR0aCA9IDAuNCwgYWxwaGEgPSAwLjIsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fcG9pbnRyYW5nZShkYXRhID0gZF9wb3Jfc2NvcmVkX21iLAogICAgICAgICAgICAgICAgICBhZXMoeSA9IG1lYW4sIHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSwKICAgICAgICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBmYXR0ZW4gPSAyKSArCiAgZ2VvbV90ZXh0KGRhdGEgPSBkYXRhLmZyYW1lKHggPSAwLjUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBjKDAqMTYsIDAuNSoxNiwgMSoxNiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYiA9IGMoIn4gQWxsIGFuc3dlcnMgJ2l0IGRvZXMgbm90IGhhcHBlbiciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICJ+IEFsbCBhbnN3ZXJzICdpdCBtaWdodCBoYXBwZW4nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAifiBBbGwgYW5zd2VycyAnaXQgZGVmaW5pdGVseSBoYXBwZW5zJyIpKSwKICAgICAgICAgICAgYWVzKHggPSB4LCB5ID0geSwgbGFiZWwgPSBsYWIpLAogICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIGhqdXN0ID0gMCwgbnVkZ2VfeSA9IDAuNSkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMTYsIDQpKSArCiAgIyB5bGltKDAsIDE2KSArCiAgbGFicyh0aXRsZSA9ICJQb3Jvc2l0eSBieSBzaXRlIiwKICAgICAgIHN1YnRpdGxlID0gIkVycm9yIGJhcnMgYXJlIGJvb3RzdHJhcHBlZCA5NSUgQ0lzIiwKICAgICAgIHggPSAiU2l0ZSIsIHkgPSAiUG9yb3NpdHkgc2NvcmUgKGF2ZXJhZ2UgcmVzcG9uc2UsIHJhbmdlOiAwLTE2KSIpCgpwb3JfcGxvdF9iIDwtIGdncGxvdChkX3Bvcl9zY29yZWRfbWIsCiAgICAgICAgICAgICAgICAgICAgIGFlcyh4ID0gZXBpX2N0cnksIGNvbG9yID0gZXBpX2N0cnkpKSArCiAgIyBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwKjE2LCBsdHkgPSAyLCBjb2xvciA9ICJibGFjayIpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLjUqMTYsIGx0eSA9IDIsIGNvbG9yID0gImJsYWNrIikgKwogICMgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMSoxNiwgbHR5ID0gMiwgY29sb3IgPSAiYmxhY2siKSArCiAgZ2VvbV9wb2ludHJhbmdlKGFlcyh5ID0gbWVhbiwgeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLAogICAgICAgICAgICAgICAgICBmYXR0ZW4gPSA0LCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDE2LCA0KSkgKwogIGxhYnModGl0bGUgPSAiKHpvb21lZCBpbikiLAogICAgICAgc3VidGl0bGUgPSAiRXJyb3IgYmFycyBhcmUgYm9vdHN0cmFwcGVkIDk1JSBDSXMiLAogICAgICAgeCA9ICJTaXRlIiwgeSA9ICJQb3Jvc2l0eSBzY29yZSAoYXZlcmFnZSByZXNwb25zZSwgcmFuZ2U6IDAtMTYpIikKCnBsb3RfZ3JpZChwb3JfcGxvdF9hLCBwb3JfcGxvdF9iLCBuY29sID0gMikKYGBgCgpGcm9tIHRoZXNlIHBsb3RzLCBpdCBpcyBjbGVhciB0aGF0IHdoaWxlIHRoZXJlIHdhcyBzdWJzdGFudGlhbCB2YXJpYWJpbGl0eSBhY3Jvc3MgaW5kaXZpZHVhbHMgd2l0aGluIGVhY2ggc2l0ZSwgcGFydGljaXBhbnRzJyBhdmVyYWdlIHJlc3BvbnNlIGFsc28gdmFyaWVkIGZhaXJseSBkcmFtYXRpY2FsbHkgYWNyb3NzIHNpdGVzLCB3aXRoIHBhcnRpY2lwYW50cyBpbiBDaGluYSBlbmRvcnNpbmcgdGhlIGZld2VzdCBpdGVtcywgcGFydGljaXBhbnRzIGluIHRoZSBVUyBhbmQgVGhhaWxhbmQgZW5kb3JzaW5nIHNsaWdodGx5IG1vcmUsIGFuZCBwYXJ0aWNpcGFudHMgaW4gR2hhbmEgYW5kIFZhbnVhdHUgZW5kb3JzaW5nIHRoZSBtb3N0LgoKYGBge3J9CnJfcG9yIDwtIGxtKHNjb3JlIH4gZXBpX2N0cnksIGRfcG9yX3Njb3JlZCwKICAgICAgICAgICAgY29udHJhc3RzID0gbGlzdChlcGlfY3RyeSA9IGNvbnRyYXN0c19jdHJ5X2N0cikpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpzdW1tYXJ5KHJfcG9yKSRjb2VmZmljaWVudHMgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgcmVuYW1lKGIgPSBFc3RpbWF0ZSwgYHN0YW5kYXJkIGVycm9yYCA9IFN0ZC4uRXJyb3IsIGB0YCA9IHQudmFsdWUsCiAgICAgICAgIHAgPSBQci4uLnQuLikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoLXBhcmFtZXRlciwgLXApLCBmdW5zKHJvdW5kKC4sIDIpKSkgJT4lCiAgbXV0YXRlKHAgPSBpZmVsc2UocCA8IDAuMDAxLCAiPDAuMDAxIiwgcm91bmQocCwgMykpLAogICAgICAgICBzaWduaWZpY2FudCA9IGlmZWxzZShwIDwgMC4wNSwgIioiLCAiIikpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpLAogICAgICAgIGNhcHRpb24gPSAiQ29tcGFyaW5nIHBvcm9zaXR5IHNjb3JlcyBhY3Jvc3Mgc2l0ZXMgW21vZGVsOiBsbShzY29yZSB+IGVwaV9jdHJ5LCBkX3Bvcl9zY29yZWQpXSIpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICByb3dfc3BlYyhjKDI6NSksIGJvbGQgPSBUKQpgYGAKCmBgYHtyfQojIHJfcG9yX21peGVkIDwtIGxtZXIocmVzcG9uc2UgfiBlcGlfY3RyeQojICAgICAgICAgICAgICAgICAgICAgKyAoMSB8IGVwaV9zdWJqKSArIChlcGlfY3RyeSB8IHF1ZXN0aW9uKSwKIyAgICAgICAgICAgICAgICAgICAgIGRfcG9yLAojICAgICAgICAgICAgICAgICAgICAgY29udHJhc3RzID0gbGlzdChlcGlfY3RyeSA9IGNvbnRyYXN0c19jdHJ5X2N0cikpCiMgCiMgc2F2ZVJEUyhyX3Bvcl9taXhlZCwgIi4vbW9kZWxzL3JfcG9yX21peGVkLlJEUyIpCgpyX3Bvcl9taXhlZCA8LSByZWFkUkRTKCIuL21vZGVscy9yX3Bvcl9taXhlZC5SRFMiKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0Kc3VtbWFyeShyX3Bvcl9taXhlZCkkY29lZmZpY2llbnRzICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1wYXJhbWV0ZXIsIC1wKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSwKICAgICAgICBjYXB0aW9uID0gIkNvbXBhcmluZyBwb3Jvc2l0eSByZXNwb25zZXMgYWNyb3NzIHNpdGVzIFttb2RlbDogbG1lcihyZXNwb25zZSB+IGVwaV9jdHJ5ICsgKDEgfCBlcGlfc3ViaikgKyAoZXBpX2N0cnkgfCBxdWVzdGlvbildIikgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIHJvd19zcGVjKGMoMjo1KSwgYm9sZCA9IFQpCmBgYAoKSSByYW4gdHdvIGtpbmRzIG9mIHN0YXRpc3RpY2FsIGFuYWx5c2VzIG9mIHRoZXNlIHJlc3VsdHM6IE9uZSBjb21wYXJpbmcgdGhlc2UgYXZlcmFnZSBzY29yZXMgYWNyb3NzIHNpdGVzICh0b3AgdGFibGUpLCBhbmQgdGhlIG90aGVyIHRha2luZyBpbnRvIGFjY291bnQgdmFyaWFiaWxpdHkgYWNyb3NzIGluZGl2aWR1YWwgcGFydGljaXBhbnRzIGFuZCBhY3Jvc3MgaW5kaXZpZHVhbCBpdGVtcyBpbiB0aGUgc2NhbGUgKGJvdHRvbSB0YWJsZSkuIFRoZW9yZXRpY2FsbHksIHRoZXNlIGFuYWx5c2VzIHNob3VsZCB5aWVsZCBwcmV0dHkgc2ltaWxhciByZXN1bHRzLCBzbyBJIHdvdWxkIGJlIGVzcGVjaWFsbHkgY29uZmlkZW50IGluIGVmZmVjdHMgdGhhdCBhcmUgY29uc2lzdGVudCBhY3Jvc3MgdGhlIHR3byBhbmFseXNlcyBhbmQgdGhhdCBzZWVtIG9idmlvdXMgZnJvbSB0aGUgcGxvdHMuCgpCb3RoIGFuYWx5c2VzIHN1Z2dlc3QgdGhhdCBwYXJ0aWNpcGFudHMgaW4gc2l0ZXMgb3V0c2lkZSBvZiB0aGUgVVMgZ2VuZXJhbGx5IGhhZCBzaWduaWZpY2FudGx5IGhpZ2hlciBQb3Jvc2l0eSBzY29yZXMgdGhhbiBwYXJ0aWNpcGFudHMgaW4gdGhlIFVTIChzZWUgImVwaV9jdHJ5bm9uVVNfVVMiIHJvd3Mp4oCUYnV0IGxvb2tpbmcgYXQgdGhlIHBsb3RzIGl0IGlzIGNsZWFyIHRoYXQgdGhpcyB3YXMgZHJpdmVuIGJ5IHBhcnRpY2lwYW50cyBpbiBHaGFuYSBhbmQgVmFudWF0dSwgYW5kIHdhcyBub3QgdHJ1ZSwgb24gYXZlcmFnZSwgYW1vbmcgcGFydGljaXBhbnRzIGluIFRoYWlsYW5kIG9yIENoaW5hLiBJbiBsaW5lIHdpdGggdGhpcywgYm90aCBhbmFseXNlcyBzdWdnZXN0IHRoYXQgcGFydGljaXBhbnRzIGluIEdoYW5hIGFuZCBWYW51YXR1IGhhZCBzaWduaWZpY2FudGx5IGhpZ2hlciBQb3Jvc2l0eSBzY29yZXMgdGhhbiBwYXJ0aWNpcGFudHMgaW4gVGhhaWxhbmQgYW5kIENoaW5h4oCUYW5kIHRoYXQgdGhpcyBkaWZmZXJlbmNlIHdhcyBmYXIgZ3JlYXRlciB0aGFuIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gInRoZSBXZXN0IHZzLiB0aGUgcmVzdCIgKHNlZSAiZXBpX2N0cnlub25VU19VUyIgcm93cykuIEJvdGggYW5hbHlzZXMgYWxzbyBzdWdnZXN0IHRoYXQgcGFydGljaXBhbnRzIGluIFRoYWlsYW5kIGhhZCBzaWduaWZpY2FudGx5IGhpZ2hlciBQb3Jvc2l0eSBzY29yZXMsIG9uIGF2ZXJhZ2UsIHRoYW4gcGFydGljaXBhbnRzIGluIENoaW5hIChzZWUgImVwaV9jdHJ5VEhfQ0giIHJvd3MpLgoKIyMgQnkgY2hhcmlzbWF0aWMgc3RhdHVzCgpOb3cgSSdsbCBicmVhayB0aGluZ3MgZG93biBieSBwYXJ0aWNpcGFudHMnIGNoYXJpc21hdGljIHN0YXR1cy4KCmBgYHtyfQpkX3Bvcl9ieWNoYXJjX3Njb3JlZF9tYiA8LSBkX3Bvcl9zY29yZWQgJT4lCiAgZmlsdGVyKCFpcy5uYShlcGlfY2hhcmMpKSAlPiUKICBncm91cF9ieShlcGlfY3RyeSwgZXBpX2NoYXJjKSAlPiUKICBtdWx0aV9ib290X3N0YW5kYXJkKCJzY29yZSIpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBtdXRhdGUoZXBpX2N0cnkgPSByZWNvZGVfY3RyeV9mdW4oZXBpX2N0cnkpKQoKIyBlZmZlY3QtY29kZSBieSBkZWZhdWx0CmNvbnRyYXN0cyhkX3Bvcl9zY29yZWQkZXBpX2N0cnkpIDwtIGNvbnRyLnN1bSg1KQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42LCBpbmNsdWRlID0gVH0KZG9kZ2Vfd2lkIDwtIDAuOApqaXR0ZXJfd2lkIDwtIDAuOQoKcG9yX2J5Y2hhcmNfcGxvdF9hIDwtIGRfcG9yX3Njb3JlZCAlPiUKICBmaWx0ZXIoIWlzLm5hKGVwaV9jaGFyYykpICU+JQogIGdncGxvdChhZXMoeCA9IGVwaV9jdHJ5LCB5ID0gc2NvcmUsIGNvbG9yID0gZXBpX2N0cnksIHNoYXBlID0gZXBpX2NoYXJjKSkgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAqMTYsIGx0eSA9IDIsIGNvbG9yID0gImJsYWNrIikgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAuNSoxNiwgbHR5ID0gMiwgY29sb3IgPSAiYmxhY2siKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMSoxNiwgbHR5ID0gMiwgY29sb3IgPSAiYmxhY2siKSArCiAgZ2VvbV9wb2ludChoZWlnaHQgPSAwLCB3aWR0aCA9IDAuNCwgYWxwaGEgPSAwLjIsIHNob3cubGVnZW5kID0gRiwKICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2ppdHRlcmRvZGdlKGppdHRlci53aWR0aCA9IGppdHRlcl93aWQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9kZ2Uud2lkdGggPSBkb2RnZV93aWQpKSArCiAgZ2VvbV9wb2ludHJhbmdlKGRhdGEgPSBkX3Bvcl9ieWNoYXJjX3Njb3JlZF9tYiwKICAgICAgICAgICAgICAgICAgYWVzKHkgPSBtZWFuLCB5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgZmF0dGVuID0gMiwgCiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSBkb2RnZV93aWQpKSArCiAgZ2VvbV90ZXh0KGRhdGEgPSBkYXRhLmZyYW1lKHggPSAwLjUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBjKDAqMTYsIDAuNSoxNiwgMSoxNiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYiA9IGMoIn4gQWxsIGFuc3dlcnMgJ2l0IGRvZXMgbm90IGhhcHBlbiciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICJ+IEFsbCBhbnN3ZXJzICdpdCBtaWdodCBoYXBwZW4nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAifiBBbGwgYW5zd2VycyAnaXQgZGVmaW5pdGVseSBoYXBwZW5zJyIpKSwKICAgICAgICAgICAgYWVzKHggPSB4LCB5ID0geSwgbGFiZWwgPSBsYWIsIHNoYXBlID0gTlVMTCksCiAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgaGp1c3QgPSAwLCBudWRnZV95ID0gMC41KSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgc2NhbGVfc2hhcGVfbWFudWFsKCJDaGFyaXNtYXRpYyBzdGF0dXMiLCB2YWx1ZXMgPSBjKDE5LCA4KSkgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMTYsIDQpKSArCiAgIyB5bGltKDAsIDE2KSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpICsKICBsYWJzKHRpdGxlID0gIlBvcm9zaXR5IGJ5IHNpdGUgYW5kIGNoYXJpc21hdGljIHN0YXR1cyIsCiAgICAgICBzdWJ0aXRsZSA9ICJFcnJvciBiYXJzIGFyZSBib290c3RyYXBwZWQgOTUlIENJcyIsCiAgICAgICB4ID0gIlNpdGUiLCB5ID0gIlBvcm9zaXR5IHNjb3JlIChhdmVyYWdlIHJlc3BvbnNlLCByYW5nZTogMC0xNikiKQoKcG9yX2J5Y2hhcmNfcGxvdF9iIDwtIGRfcG9yX2J5Y2hhcmNfc2NvcmVkX21iICU+JQogIGxlZnRfam9pbihjaGFyY19jb3VudHMpICU+JQogIGdncGxvdChhZXMoeCA9IGVwaV9jdHJ5LCBjb2xvciA9IGVwaV9jdHJ5LCBzaGFwZSA9IGVwaV9jaGFyYykpICsKICAjIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAqMTYsIGx0eSA9IDIsIGNvbG9yID0gImJsYWNrIikgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAuNSoxNiwgbHR5ID0gMiwgY29sb3IgPSAiYmxhY2siKSArCiAgIyBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAxKjE2LCBsdHkgPSAyLCBjb2xvciA9ICJibGFjayIpICsKICBnZW9tX3BvaW50cmFuZ2UoYWVzKHkgPSBtZWFuLCB5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksCiAgICAgICAgICAgICAgICAgIGZhdHRlbiA9IDQsIHNob3cubGVnZW5kID0gRiwgCiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSBkb2RnZV93aWQpKSArCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHBhc3RlMCgibj0iLCBuKSwgeSA9IGNpX2xvd2VyIC0gMC41LCAKICAgICAgICAgICAgICAgIHNoYXBlID0gTlVMTCwgZ3JvdXAgPSBlcGlfY2hhcmMpLAogICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gZG9kZ2Vfd2lkKSwgCiAgICAgICAgICAgIHNpemUgPSAzLCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDE2LCA0KSkgKwogIHNjYWxlX3NoYXBlX21hbnVhbCgiQ2hhcmlzbWF0aWMgc3RhdHVzIiwgdmFsdWVzID0gYygxOSwgOCkpICsKICBsYWJzKHRpdGxlID0gIih6b29tZWQgaW4pIiwKICAgICAgIHN1YnRpdGxlID0gIkVycm9yIGJhcnMgYXJlIGJvb3RzdHJhcHBlZCA5NSUgQ0lzIiwKICAgICAgIHggPSAiU2l0ZSIsIHkgPSAiUG9yb3NpdHkgc2NvcmUgKGF2ZXJhZ2UgcmVzcG9uc2UsIHJhbmdlOiAwLTE2KSIpCgpwbG90X2dyaWQocGxvdF9ncmlkKHBvcl9ieWNoYXJjX3Bsb3RfYSArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgcG9yX2J5Y2hhcmNfcGxvdF9iLCBuY29sID0gMiksCiAgICAgICAgICBnZXRfbGVnZW5kKHBvcl9ieWNoYXJjX3Bsb3RfYSksIG5jb2wgPSAxLCByZWxfaGVpZ2h0cyA9IGMoMSwgMC4xKSkKYGBgCgpGcm9tIHRoZXNlIHBsb3RzLCBpdCBsb29rcyBsaWtlIHRoZSBnZW5lcmFsIHBhdHRlcm4gb2Ygc2l0ZSBkaWZmZXJlbmNlcyBoZWxkIGJvdGggYW1vbmcgbm9uLWNoYXJpc21hdGljcyBhbmQgY2hhcmlzbWF0aWNzLCBidXQgdGhhdCBlc3BlY2lhbGx5IGluIHNpdGVzIHdoZXJlIFBvcm9zaXR5IHNjb3JlcyB3ZXJlIGdlbmVyYWxseSBsb3dlciAodGhlIFVTLCBUaGFpbGFuZCwgYW5kIENoaW5hKSwgY2hhcmlzbWF0aWNzIHNjb3JlZCBoaWdoZXIgaW4gUG9yb3NpdHkgdGhhbiBub24tY2hhcmlzbWF0aWNzLiAoVGhpcyBtYWtlcyBzZW5zZSEpCgpgYGB7cn0Kcl9wb3JfYnljaGFyYyA8LSBsbShzY29yZSB+IGVwaV9jdHJ5ICogZXBpX2NoYXJjLCBkX3Bvcl9zY29yZWQsCiAgICAgICAgICAgICAgICAgICAgY29udHJhc3RzID0gbGlzdChlcGlfY3RyeSA9IGNvbnRyYXN0c19jdHJ5X2N0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVwaV9jaGFyYyA9IGNvbnRyYXN0c19jaGFyY19kdW0pKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0Kc3VtbWFyeShyX3Bvcl9ieWNoYXJjKSRjb2VmZmljaWVudHMgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgcmVuYW1lKGIgPSBFc3RpbWF0ZSwgYHN0YW5kYXJkIGVycm9yYCA9IFN0ZC4uRXJyb3IsIGB0YCA9IHQudmFsdWUsCiAgICAgICAgIHAgPSBQci4uLnQuLikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoLXBhcmFtZXRlciwgLXApLCBmdW5zKHJvdW5kKC4sIDIpKSkgJT4lCiAgbXV0YXRlKHAgPSBpZmVsc2UocCA8IDAuMDAxLCAiPDAuMDAxIiwgcm91bmQocCwgMykpLAogICAgICAgICBzaWduaWZpY2FudCA9IGlmZWxzZShwIDwgMC4wNSwgIioiLCAiIikpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpLAogICAgICAgIGNhcHRpb24gPSAiQ29tcGFyaW5nIHBvcm9zaXR5IHNjb3JlcyBhY3Jvc3Mgc2l0ZXMgYW5kIGNoYXJpc21hdGljIHN0YXR1cyBbbW9kZWw6IGxtKHNjb3JlIH4gZXBpX2N0cnkgKiBlcGlfY2hhcmMsIGRfcG9yX3Njb3JlZCAlPiUgKC4uLikpXSIpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICByb3dfc3BlYyhjKDY6MTApLCBib2xkID0gVCkKYGBgCgpgYGB7cn0KIyBNT0RFTElORyBOT1RFUzoKIyBtb2RlbCB3aXRoIChlcGlfY3RyeSAqIGVwaV9jaGFyYyB8IHF1ZXN0aW9uKSB0aHJldyB3YXJuaW5nIChkZj8pCiMgbW9kZWwgd2l0aCAoZXBpX2N0cnkgKyBlcGlfY2hhcmMgfCBxdWVzdGlvbikgZmFpbGVkIHRvIGNvbnZlcmdlIHdpdGggMSBuZWcgZWlnZW52YWx1ZQojIG1vZGVsIHdpdGggKGVwaV9jdHJ5IHwgcXVlc3Rpb24pIGZhaWxlZCB0byBjb252ZXJnZSB3aXRoIDEgbmVnIGVpZ2VudmFsdWUKCiMgcl9wb3JfbWl4ZWQgPC0gbG1lcihyZXNwb25zZSB+IGVwaV9jdHJ5ICogZXBpX2NoYXJjCiMgICAgICAgICAgICAgICAgICAgICArICgxIHwgZXBpX3N1YmopICsgKGVwaV9jdHJ5IHwgcXVlc3Rpb24pLAojICAgICAgICAgICAgICAgICAgICAgZF9wb3IgJT4lCiMgICAgICAgICAgICAgICAgICAgICAgIGxlZnRfam9pbihkX2RlbW8gJT4lIGRpc3RpbmN0KGVwaV9zdWJqLCBlcGlfY2hhcmMpKSAlPiUKIyAgICAgICAgICAgICAgICAgICAgICAgbXV0YXRlKGVwaV9jaGFyYyA9IHJlY29kZV9jaGFyY19mdW4oZXBpX2NoYXJjKSkgJT4lCiMgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcighaXMubmEoZXBpX2NoYXJjKSksCiMgICAgICAgICAgICAgICAgICAgICBjb250cmFzdHMgPSBsaXN0KGVwaV9jdHJ5ID0gY29udHJhc3RzX2N0cnlfY3RyLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcGlfY2hhcmMgPSBjb250cmFzdHNfY2hhcmNfZHVtKSkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CiMgc3VtbWFyeShyX3Bvcl9taXhlZCkkY29lZmZpY2llbnRzICU+JQojICAgZGF0YS5mcmFtZSgpICU+JQojICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKIyAgIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAojICAgICAgICAgIHAgPSBQci4uLnQuLikgJT4lCiMgICBtdXRhdGVfYXQodmFycygtcGFyYW1ldGVyLCAtcCksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKIyAgIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKIyAgICAgICAgICBzaWduaWZpY2FudCA9IGlmZWxzZShwIDwgMC4wNSwgIioiLCAiIikpICU+JQojICAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIiksCiMgICAgICAgICBjYXB0aW9uID0gIkNvbXBhcmluZyBwb3Jvc2l0eSByZXNwb25zZXMgYWNyb3NzIHNpdGVzIGFuZCBjaGFyaXNtYXRpYyBzdGF0dXMgW21vZGVsOiBsbWVyKHJlc3BvbnNlIH4gZXBpX2N0cnkgKiBlcGlfY2hhcmMgKyAoMSB8IGVwaV9zdWJqKSArIChlcGlfY3RyeSAgfCBxdWVzdGlvbildIikgJT4lCiMgICBrYWJsZV9zdHlsaW5nKCkgIyU+JQojICAgIyByb3dfc3BlYyhjKDI6NSksIGJvbGQgPSBUKQpgYGAKCkkgaGFkIHRyb3VibGUgcnVubmluZyB0aGUgc2Vjb25kIGtpbmQgb2YgYW5hbHlzaXMgKHRha2luZyBpbnRvIGFjY291bnQgdmFyaWFiaWxpdHkgYWNyb3NzIGluZGl2aWR1YWwgcGFydGljaXBhbnRzIGFuZCBhY3Jvc3MgaW5kaXZpZHVhbCBpdGVtcyBpbiB0aGUgc2NhbGUpLCBzbyBJIG9ubHkgcmFuIHRoZSBmaXJzdCAodXNpbmcgc3VtIHNjb3JlcyByYXRoZXIgdGhhbiBpbmRpdmlkdWFsIHJlc3BvbnNlcykuIAoKVGhpcyBhbmFseXNpcyBjb25maXJtZWQgdGhhdCBhbGwgb2YgdGhlIGdlbmVyYWwgb2JzZXJ2YXRpb25zIGRpc2N1c3NlZCBpbiB0aGUgcHJldmlvdXMgc2VjdGlvbiBob2xkIHdpdGhpbiB0aGUgbm9uLWNoYXJpc21hdGljIHNhbXBsZXMuIEluIGFkZGl0aW9uLCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcywgY2hhcmlzbWF0aWMgcGFydGljaXBhbnRzIHRlbmRlZCB0byBoYXZlIGhpZ2hlciBQb3Jvc2l0eSBzY29yZXMgKHNlZSAiZXBpX2NoYXJjY2hhcmNfbm9uIiByb3cpLCBhbmQgdGhpcyBkaWZmZXJlbmNlIHdhcyBtb3JlIHByb25vdW5jZWQgaW4gVGhhaWxhbmQgYW5kIENoaW5hIHRoYW4gaW4gR2hhbmEgYW5kIFZhbnVhdHUgKHNlZSAiZXBpX2N0cnlHSFZUX1RIQ0g6ZXBpX2NoYXJjY2hhcmNfbm9uIikuIAoKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMgQnkgaXRlbQoKTmV4dCwgSSdsbCBleGFtaW5lIHJlc3BvbnNlcyB0byBpbmRpdmlkdWFsIGl0ZW1zIG9uIHRoZSBQb3Jvc2l0eSBzY2FsZSwgZmlyc3QgZm9jdXNpbmcgb24gdGhlIGJhc2ljIGl0ZW1zIGFuZCB0aGVuIHR1cm5pbmcgdG8gdGhlIGZvbGxvdy11cCBxdWVzdGlvbnMgYW5kIGEgZmV3IHNpdGUtc3BlY2lmaWMgcXVlc3Rpb25zLiBGb3IgZWFjaCBpdGVtLCBwYXJ0aWNpcGFudHMgY291bGQgc2F5ICJpdCBkb2VzIG5vdCBoYXBwZW4iIChzY29yZWQgYXMgMCksICJpdCBtaWdodCBoYXBwZW4iIChzY29yZWQgYXMgMC41KSwgb3IgIml0IGRlZmluaXRlbHkgaGFwcGVucyIgKHNjb3JlZCBhcyAxKS4KCmBgYHtyLCBmaWcud2lkdGggPSA2LCBmaWcuYXNwID0gMSwgaW5jbHVkZSA9IEZ9CmRfcG9yICU+JQogIGZpbHRlcighZ3JlcGwoImEiLCBxdWVzdGlvbiksICFncmVwbCgiYiIsIHF1ZXN0aW9uKSwgCiAgICAgICAgICFncmVwbCgiYyIsIHF1ZXN0aW9uKSkgJT4lCiAgZ3JvdXBfYnkoZXBpX2N0cnksIHF1ZXN0aW9uLCBxdWVzdGlvbl90ZXh0LCBvcmRlcikgJT4lCiAgbXVsdGlfYm9vdF9zdGFuZGFyZCgicmVzcG9uc2UiLCBuYS5ybSA9IFQpICU+JQogIHVuZ3JvdXAoKSAlPiUgCiAgZ2dwbG90KGFlcyh4ID0gZXBpX2N0cnksIHkgPSBtZWFuLCBjb2xvciA9IGVwaV9jdHJ5KSkgKwogIGZhY2V0X3dyYXAofiByZW9yZGVyKHN0cl93cmFwKHF1ZXN0aW9uX3RleHQsIDUwKSwgb3JkZXIpLCBuY29sID0gNCkgKwogIGdlb21faml0dGVyKGRhdGEgPSBkX3BvciAlPiUgCiAgICAgICAgICAgICAgICBmaWx0ZXIoIWdyZXBsKCJhIiwgcXVlc3Rpb24pLCAhZ3JlcGwoImIiLCBxdWVzdGlvbiksIAogICAgICAgICAgICAgICAgICAgICAgICFncmVwbCgiYyIsIHF1ZXN0aW9uKSksIGFlcyh5ID0gcmVzcG9uc2UpLCAKICAgICAgICAgICAgICBoZWlnaHQgPSAwLjA1LCBhbHBoYSA9IDAuMDgsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fcG9pbnRyYW5nZShhZXMoeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLCAKICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuNSksIAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMSwgMC4yNSkpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpICsKICBsYWJzKHRpdGxlID0gIlBvcm9zaXR5IHNjYWxlOiBSZXNwb25zZXMgdG8gaW5kaXZpZHVhbCBpdGVtcyIsCiAgICAgICBzdWJ0aXRsZSA9ICJFcnJvciBiYXJzIGFyZSBib290c3RyYXBwZWQgOTUlIENJcyIsCiAgICAgICB4ID0gIlNpdGUiLCAKICAgICAgIHkgPSAiTWVhbiByZXNwb25zZSAoMCA9IGl0IGRvZXMgbm90IGhhcHBlbiwgMC41ID0gaXQgbWlnaHQgaGFwcGVuLCAxID0gaXQgZGVmaW5pdGVseSBoYXBwZW5zKSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDYsIGZpZy5hc3AgPSAxLjIsIGluY2x1ZGUgPSBUfQpkX3BvciAlPiUKICBmaWx0ZXIoIWdyZXBsKCJhIiwgcXVlc3Rpb24pLCAhZ3JlcGwoImIiLCBxdWVzdGlvbiksIAogICAgICAgICAhZ3JlcGwoImMiLCBxdWVzdGlvbiksICFpcy5uYShlcGlfY2hhcmMpKSAlPiUKICBncm91cF9ieShlcGlfY3RyeSwgZXBpX2NoYXJjLCBxdWVzdGlvbiwgcXVlc3Rpb25fdGV4dCwgb3JkZXIpICU+JQogIG11bHRpX2Jvb3Rfc3RhbmRhcmQoInJlc3BvbnNlIiwgbmEucm0gPSBUKSAlPiUKICB1bmdyb3VwKCkgJT4lIAogIGdncGxvdChhZXMoeCA9IGVwaV9jdHJ5LCB5ID0gbWVhbiwgY29sb3IgPSBlcGlfY3RyeSwgc2hhcGUgPSBlcGlfY2hhcmMpKSArCiAgZmFjZXRfd3JhcCh+IHJlb3JkZXIoc3RyX3dyYXAocXVlc3Rpb25fdGV4dCwgNTApLCBvcmRlciksIG5jb2wgPSA0KSArCiAgZ2VvbV9wb2ludChkYXRhID0gZF9wb3IgJT4lIAogICAgICAgICAgICAgICBmaWx0ZXIoIWdyZXBsKCJhIiwgcXVlc3Rpb24pLCAhZ3JlcGwoImIiLCBxdWVzdGlvbiksIAogICAgICAgICAgICAgICAgICAgICAgIWdyZXBsKCJjIiwgcXVlc3Rpb24pLCAhaXMubmEoZXBpX2NoYXJjKSksIAogICAgICAgICAgICAgYWVzKHkgPSByZXNwb25zZSksIAogICAgICAgICAgICAgYWxwaGEgPSAwLjA4LCBzaG93LmxlZ2VuZCA9IEYsCiAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2ppdHRlcmRvZGdlKGppdHRlci53aWR0aCA9IGppdHRlcl93aWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppdHRlci5oZWlnaHQgPSAwLjA1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2RnZS53aWR0aCA9IGRvZGdlX3dpZCkpICsKICBnZW9tX3BvaW50cmFuZ2UoYWVzKHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSwgCiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSBkb2RnZV93aWQpLCAKICAgICAgICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBzaG93LmxlZ2VuZCA9IFQpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIsIGd1aWRlID0gIm5vbmUiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCAxLCAwLjI1KSkgKwogIHNjYWxlX3NoYXBlX21hbnVhbCgiQ2hhcmlzbWF0aWMgc3RhdHVzIiwgdmFsdWVzID0gYygxOSwgOCkpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSksCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpICsKICBsYWJzKHRpdGxlID0gIlBvcm9zaXR5IHNjYWxlOiBSZXNwb25zZXMgdG8gaW5kaXZpZHVhbCBpdGVtcyIsCiAgICAgICBzdWJ0aXRsZSA9ICJFcnJvciBiYXJzIGFyZSBib290c3RyYXBwZWQgOTUlIENJcyIsCiAgICAgICB4ID0gIlNpdGUiLCAKICAgICAgIHkgPSAiTWVhbiByZXNwb25zZSAoMCA9IGl0IGRvZXMgbm90IGhhcHBlbiwgMC41ID0gaXQgbWlnaHQgaGFwcGVuLCAxID0gaXQgZGVmaW5pdGVseSBoYXBwZW5zKSIsCiAgICAgICBzaGFwZSA9ICJDaGFyaXNtYXRpYyBzdGF0dXMiKQpgYGAKClRoZXJlIGlzIHNvIG11Y2ggdG8gdW5wYWNrIGhlcmUhIFdoZW4gSSBsb29rIGF0IHRoZXNlIGl0ZW1zLCBhIGZldyB0aGluZ3MgdGhhdCBJIHRoaW5rIGFib3V0IGFyZToKCi0gV2hpY2ggaXRlbXMgdGVuZCB0byBmb2xsb3cgdGhlIG92ZXJhbGwgcGF0dGVybiBlc3RhYmxpc2hlZCBieSB0aGUgIm92ZXJhbGwgc2NvcmVzIiBwcmVzZW50ZWQgaW4gdGhlIHByZXZpb3VzIHNlY3Rpb24/IChlLmcuLCBxdWVzdGlvbiAjMSwgbWFueSBvdGhlcnMpCi0gQW1vbmcgaXRlbXMgdGhhdCBmb2xsb3cgdGhlIG92ZXJhbGwgcGF0dGVybiwgZm9yIHdoaWNoIGl0ZW1zIGlzIHRoaXMgcGF0dGVybiBleGFnZ2VyYXRlZD8gKGUuZy4sIHF1ZXN0aW9ucyAjNSwgIzEyKSBGb3Igd2hpY2ggaXRlbXMgaXMgdGhpcyBwYXR0ZXJuIGF0dGVudHVhdGVkPyAoZS5nLiwgcXVlc2l0b25zICMyLCAjMykgCi0gV2hpY2ggaXRlbXMgZG8gX25vdF8gZm9sbG93IHRoaXMgb3ZlcmFsbCB0cmVuZD8gKGUuZy4sIHF1ZXN0aW9uICMxNikKLSBXaGljaCBpdGVtcyBzZWVtIHRvIHBpY2sgb3V0IGFuIGV4cGVyaWVuY2UgdGhhdCBpcyB1bmlxdWVseSBzYWxpZW50L3ByZXZhbGVudCBpbiBhIHBhcnRpY3VsYXIgc2l0ZT8gKGUuZy4sIHF1ZXN0aW9ucyAjNywgIzE2KQotIFdoaWNoIGl0ZW1zIHNlZW0gdG8gcGljayBvdXQgYW4gZXhwZXJpZW5jZSB0aGF0IGlzIHVuaXF1ZWx5IHNhbGllbnQvcHJldmFsZW50IGFtb25nIGNoYXJpc21hdGljcz8gKGUuZy4sIHF1ZXN0aW9ucyAjNCwgIzUpCgpfTm90ZSB0aGF0IEkganVzdCBwaWNrZWQgb3V0IGEgZmV3IGV4YW1wbGVzIHRvIGlsbHVzdHJhdGUgd2hhdCBJIG1lYW4sIGJ1dCB0aGVyZSBhcmUgY2VydGFpbmx5IG90aGVyIGludGVyZXN0aW5nIGNhc2VzIHRoYXQgbWlnaHQgYmUgd29ydGggdGhpbmtpbmcgYWJvdXQgbW9yZSBkZWVwbHkgLSBlLmcuLCBxdWVzdGlvbiAjMTUsIHdoZXJlIFVTIHBhcnRpY2lwYW50cyBhcHBlYXIgbW9yZSBsaWtlIEdoYW5haWFuICYgbmktVmFuIHBhcnRpY2lwYW50cyB0aGFuIFRoYWkgb3IgQ2hpbmVzZSBwYXJ0aWNpcGFudHMpLl8gCgpIZXJlIGFyZSBwYXJ0aWNpcGFudHMnIGFuc3dlcnMgdG8gdGhlIGZvbGxvdy11cCBxdWVzdGlvbnMgZm9yIGEgc3Vic2V0IG9mIHRob3NlIGJhc2ljIGl0ZW1zOgoKYGBge3J9CnBvcl9mdV9xdWVzdGlvbl90ZXh0IDwtIGRfcG9yICU+JQogIGZpbHRlcihxdWVzdGlvbiAlaW4lIGMoImVwaV8xXzAxIiwgImVwaV8xXzA0IiwgImVwaV8xXzA2IiwgImVwaV8xXzA3IiwKICAgICAgICAgICAgICAgICAgICAgICAgICJlcGlfMV8xMSIsICJlcGlfMV8xNCIpKSAlPiUKICBkaXN0aW5jdChxdWVzdGlvbiwgcXVlc3Rpb25fdGV4dCwgb3JkZXIpICU+JQogIG11dGF0ZShxdWVzdGlvbl90ZXh0ID0gYXMuY2hhcmFjdGVyKHF1ZXN0aW9uX3RleHQpKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA2LCBmaWcuYXNwID0gMSwgaW5jbHVkZSA9IFR9CmRfcG9yICU+JQogIGZpbHRlcihncmVwbCgiYSIsIHF1ZXN0aW9uKSB8IGdyZXBsKCJiIiwgcXVlc3Rpb24pIHwgZ3JlcGwoImMiLCBxdWVzdGlvbikpICU+JQogIGZpbHRlcighZ3JlcGwoInVzYSIsIHF1ZXN0aW9uKSwgIWdyZXBsKCJnaGEiLCBxdWVzdGlvbiksIAogICAgICAgICAhZ3JlcGwoImNobiIsIHF1ZXN0aW9uKSwgIWdyZXBsKCJ2dXQiLCBxdWVzdGlvbiksCiAgICAgICAgICFncmVwbCgidGhsIiwgcXVlc3Rpb24pKSAlPiUgCiAgZmlsdGVyKCFpcy5uYShlcGlfY2hhcmMpKSAlPiUKICBncm91cF9ieShlcGlfY3RyeSwgZXBpX2NoYXJjLCBxdWVzdGlvbiwgcXVlc3Rpb25fdGV4dCwgb3JkZXIpICU+JQogIG11bHRpX2Jvb3Rfc3RhbmRhcmQoInJlc3BvbnNlIiwgbmEucm0gPSBUKSAlPiUKICB1bmdyb3VwKCkgJT4lIAogIGdncGxvdChhZXMoeCA9IGVwaV9jdHJ5LCB5ID0gbWVhbiwgY29sb3IgPSBlcGlfY3RyeSwgc2hhcGUgPSBlcGlfY2hhcmMpKSArCiAgZmFjZXRfd3JhcCh+IHJlb3JkZXIoc3RyX3dyYXAocXVlc3Rpb25fdGV4dCwgMzApLCBvcmRlciksIG5jb2wgPSA2KSArCiAgZ2VvbV9qaXR0ZXIoZGF0YSA9IGRfcG9yICU+JSAKICAgICAgICAgICAgICAgIGZpbHRlcihncmVwbCgiYSIsIHF1ZXN0aW9uKSB8IGdyZXBsKCJiIiwgcXVlc3Rpb24pIHwKICAgICAgICAgICAgICAgICAgICAgICAgIGdyZXBsKCJjIiwgcXVlc3Rpb24pKSAlPiUKICAgICAgICAgICAgICAgIGZpbHRlcighZ3JlcGwoInVzYSIsIHF1ZXN0aW9uKSwgIWdyZXBsKCJnaGEiLCBxdWVzdGlvbiksIAogICAgICAgICAgICAgICAgICAgICAgICFncmVwbCgiY2huIiwgcXVlc3Rpb24pLCAhZ3JlcGwoInZ1dCIsIHF1ZXN0aW9uKSwKICAgICAgICAgICAgICAgICAgICAgICAhZ3JlcGwoInRobCIsIHF1ZXN0aW9uKSkgJT4lCiAgICAgICAgICAgICAgICBmaWx0ZXIoIWlzLm5hKGVwaV9jaGFyYykpLCBhZXMoeSA9IHJlc3BvbnNlKSwgCiAgICAgICAgICAgICAgaGVpZ2h0ID0gMC4wNSwgYWxwaGEgPSAwLjA4LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3BvaW50cmFuZ2UoYWVzKHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSwgCiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjUpLCAKICAgICAgICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBzaG93LmxlZ2VuZCA9IFQpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIsIGd1aWRlID0gIm5vbmUiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCAyLCAwLjUpKSArCiAgc2NhbGVfc2hhcGVfbWFudWFsKCJDaGFyaXNtYXRpYyBzdGF0dXMiLCB2YWx1ZXMgPSBjKDE5LCA4KSkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSwKICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIikgKwogIGxhYnModGl0bGUgPSAiUG9yb3NpdHkgc2NhbGU6IFJlc3BvbnNlcyB0byBmb2xsb3ctdXAgcXVlc3Rpb25zIiwKICAgICAgIHN1YnRpdGxlID0gcGFzdGUwKHBvcl9mdV9xdWVzdGlvbl90ZXh0JHF1ZXN0aW9uX3RleHQgJT4lIHBhc3RlMChjb2xsYXBzZSA9ICdcbicpLCAiXG5cbk5vdGU6IHRoZXNlIHF1ZXN0aW9ucyBhcmUgTk9UIGN1cnJlbnRseSBpbmNsdWRlZCBpbiBQb3Jvc2l0eSAnc2NvcmVzJ1xuRXJyb3IgYmFycyBhcmUgYm9vdHN0cmFwcGVkIDk1JSBDSXMiKSwKICAgICAgIHggPSAiU2l0ZSIsIAogICAgICAgeSA9ICJNZWFuIHJlc3BvbnNlICgwID0gbm8sIDEgPSBhIGxpdHRsZSwgMiA9IGEgbG90KSIpCmBgYAoKQW5kIGhlcmUgYXJlIHBhcnRpY2lwYW50cycgYW5zd2VycyB0byBhIGZldyBzaXRlLXNwZWNpZmljIHF1ZXN0aW9uczoKCmBgYHtyfQpwb3Jfc2l0ZXNwZWNfcXVlc3Rpb25fdGV4dCA8LSBkX3BvciAlPiUKICBmaWx0ZXIoZ3JlcGwoInVzYSIsIHF1ZXN0aW9uKSB8IGdyZXBsKCJnaGEiLCBxdWVzdGlvbikgfAogICAgICAgICBncmVwbCgiY2huIiwgcXVlc3Rpb24pfCBncmVwbCgidnV0IiwgcXVlc3Rpb24pIHwKICAgICAgICAgZ3JlcGwoInRobCIsIHF1ZXN0aW9uKSkgJT4lCiAgZGlzdGluY3QocXVlc3Rpb24sIHF1ZXN0aW9uX3RleHQsIG9yZGVyKSAlPiUKICBtdXRhdGUocXVlc3Rpb25fdGV4dCA9IGFzLmNoYXJhY3RlcihxdWVzdGlvbl90ZXh0KSkKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CmRfcG9yICU+JQogIGZpbHRlcihncmVwbCgidXNhIiwgcXVlc3Rpb24pIHwgZ3JlcGwoImdoYSIsIHF1ZXN0aW9uKSB8CiAgICAgICAgIGdyZXBsKCJjaG4iLCBxdWVzdGlvbil8IGdyZXBsKCJ2dXQiLCBxdWVzdGlvbikgfAogICAgICAgICBncmVwbCgidGhsIiwgcXVlc3Rpb24pKSAlPiUgCiAgZmlsdGVyKCFpcy5uYShlcGlfY2hhcmMpKSAlPiUKICBncm91cF9ieShlcGlfY3RyeSwgZXBpX2NoYXJjLCBxdWVzdGlvbiwgcXVlc3Rpb25fdGV4dCwgb3JkZXIpICU+JQogIG11bHRpX2Jvb3Rfc3RhbmRhcmQoInJlc3BvbnNlIiwgbmEucm0gPSBUKSAlPiUKICB1bmdyb3VwKCkgJT4lIAogIGdncGxvdChhZXMoeCA9IGVwaV9jdHJ5LCB5ID0gbWVhbiwgY29sb3IgPSBlcGlfY3RyeSwgc2hhcGUgPSBlcGlfY2hhcmMpKSArCiAgZmFjZXRfd3JhcCh+IHJlb3JkZXIoc3RyX3dyYXAocXVlc3Rpb25fdGV4dCwgNDApLCBvcmRlciksIAogICAgICAgICAgICAgbmNvbCA9IDQsIHNjYWxlcyA9ICJmcmVlX3giKSArCiAgZ2VvbV9qaXR0ZXIoZGF0YSA9IGRfcG9yICU+JSAKICAgICAgICAgICAgICAgIGZpbHRlcihncmVwbCgidXNhIiwgcXVlc3Rpb24pIHwgZ3JlcGwoImdoYSIsIHF1ZXN0aW9uKSB8CiAgICAgICAgICAgICAgICAgICAgICAgICBncmVwbCgiY2huIiwgcXVlc3Rpb24pfCBncmVwbCgidnV0IiwgcXVlc3Rpb24pIHwKICAgICAgICAgICAgICAgICAgICAgICAgIGdyZXBsKCJ0aGwiLCBxdWVzdGlvbikpICU+JQogICAgICAgICAgICAgICAgICBmaWx0ZXIoIWlzLm5hKGVwaV9jaGFyYykpLCBhZXMoeSA9IHJlc3BvbnNlKSwgCiAgICAgICAgICAgICAgaGVpZ2h0ID0gMC4wNSwgYWxwaGEgPSAwLjA4LCBzaG93LmxlZ2VuZCA9IFQpICsKICBnZW9tX3BvaW50cmFuZ2UoYWVzKHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSwgCiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjUpLCAKICAgICAgICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBzaG93LmxlZ2VuZCA9IFQpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIsIGd1aWRlID0gIm5vbmUiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCAxLCAwLjI1KSkgKwogIHNjYWxlX3NoYXBlX21hbnVhbCgiQ2hhcmlzbWF0aWMgc3RhdHVzIiwgdmFsdWVzID0gYygxOSwgOCkpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSksCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpICsKICBsYWJzKHRpdGxlID0gIlBvcm9zaXR5IHNjYWxlOiBSZXNwb25zZXMgdG8gc2l0ZS1zcGVjaWZpYyBxdWVzdGlvbnMiLAogICAgICAgc3VidGl0bGUgPSAiTm90ZTogdGhlc2UgcXVlc3Rpb25zIGFyZSBOT1QgY3VycmVudGx5IGluY2x1ZGVkIGluIFBvcm9zaXR5ICdzY29yZXMnXG5FcnJvciBiYXJzIGFyZSBib290c3RyYXBwZWQgOTUlIENJcyIsCiAgICAgICB4ID0gIlNpdGUiLCAKICAgICAgIHkgPSAiTWVhbiByZXNwb25zZSAoMCA9IG5vLCAwLjUgPSBtYXliZSwgMSA9IHllcykiKQpgYGAKCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMgUHJheWVyIChzcGlyaXR1YWwgZXhwZXJpZW5jZSBRdWVzdGlvbiAjMSkKCkZvciBTcGlyaXR1YWwgRXBpZGVtaW9sb2d5LCB0aGUgInNwaXJpdHVhbCBleHBlcmllbmNlIiBwb3J0aW9uIG9mIHRoZSBlcGlkZW1pb2xvZ3kgYmVnYW4gd2l0aCB0d28gcXVlc3Rpb25zIGludGVuZGVkIHRvIGdhdWdlIHBhcnRpY2lwYW50cycgcHJheWVyIHByYWN0aWNlLiBIZXJlIGFyZSBwYXJ0aWNpcGFudHMnIHJlc3BvbnNlcyB0byB0aGVzZSB0d28gcXVlc3Rpb25zOgoKYGBge3IsIGZpZy53aWR0aCA9IDYsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpkX3ByYXllciAlPiUKICBmaWx0ZXIoIWlzLm5hKGVwaV9jaGFyYykpICU+JQogIGdyb3VwX2J5KGVwaV9jdHJ5LCBlcGlfY2hhcmMsIHF1ZXN0aW9uLCBxdWVzdGlvbl90ZXh0LCBvcmRlcikgJT4lCiAgbXVsdGlfYm9vdF9zdGFuZGFyZCgicmVzcG9uc2UiLCBuYS5ybSA9IFQpICU+JQogIHVuZ3JvdXAoKSAlPiUgCiAgZ2dwbG90KGFlcyh4ID0gZXBpX2N0cnksIHkgPSBtZWFuLCBjb2xvciA9IGVwaV9jdHJ5LCBzaGFwZSA9IGVwaV9jaGFyYykpICsKICBmYWNldF93cmFwKH4gcmVvcmRlcihzdHJfd3JhcChxdWVzdGlvbl90ZXh0LCA5MCksIG9yZGVyKSwgbmNvbCA9IDIsCiAgICAgICAgICAgICBzY2FsZXMgPSAiZnJlZSIpICsKICBnZW9tX3BvaW50KGRhdGEgPSBkX3ByYXllciAlPiUgZmlsdGVyKCFpcy5uYShlcGlfY2hhcmMpKSwgCiAgICAgICAgICAgICBhZXMoeSA9IHJlc3BvbnNlKSwgYWxwaGEgPSAwLjA4LCBzaG93LmxlZ2VuZCA9IEYsCiAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2ppdHRlcmRvZGdlKGppdHRlci53aWR0aCA9IGppdHRlcl93aWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppdHRlci5oZWlnaHQgPSAwLjA1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2RnZS53aWR0aCA9IGRvZGdlX3dpZCkpICsKICBnZW9tX3BvaW50cmFuZ2UoYWVzKHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSwgCiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSBkb2RnZV93aWQpLCAKICAgICAgICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBzaG93LmxlZ2VuZCA9IFQpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIsIGd1aWRlID0gIm5vbmUiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCA0LCAwLjUpKSArCiAgc2NhbGVfc2hhcGVfbWFudWFsKCJDaGFyaXNtYXRpYyBzdGF0dXMiLCB2YWx1ZXMgPSBjKDE5LCA4KSkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSwKICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIikgKwogIGxhYnModGl0bGUgPSAiUHJheWVyIiwKICAgICAgIHN1YnRpdGxlID0gIkVycm9yIGJhcnMgYXJlIGJvb3RzdHJhcHBlZCA5NSUgQ0lzXG5Gb3IgcXVlc3Rpb24gIzEsIDAgPSBubywgMSA9IHllczsgZm9yIHF1ZXN0aW9uICMxYSwgMSA9IDAtMTVtaW4sIDIgPSAxNS0zMG1pbiwgMyA9IDMwLTYwbWluLCA0ID0gPjYwbWluIiwKICAgICAgIHggPSAiU2l0ZSIsIAogICAgICAgeSA9ICJNZWFuIHJlc3BvbnNlIChzY2FsZXMgdmFyaWVkIGJ5IHF1ZXN0aW9uKSIpCmBgYAoKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyBBbGwgc3Bpcml0dWFsIGV4cGVyaWVuY2VzIChRdWVzdGlvbnMgIzItMjMpCgpGb3IgU3Bpcml0dWFsIEVwaWRlbWlvbG9neSwgdGhlIFNwaXJpdHVhbCBFeHBlcmllbmNlcyBzY2FsZSBjb25zaXN0ZWQgb2YgMjIgYmFzaWMgaXRlbXMgKDM0IGJhc2ljIGl0ZW1zIGluIFRoYWlsYW5kKSwgYW5kIGZvbGxvdy11cCBxdWVzdGlvbnMgdG8gYSBzdWJzZXQgb2YgdGhlc2UgaXRlbXMuIEZvciBlYWNoIG9mIHRoZSBiYXNpYyBpdGVtcywgcGFydGljaXBhbnRzIGNvdWxkIHJlc3BvbmQgYnkgc2F5aW5nICJubyIgKHNjb3JlZCBhcyAwKSwgIm1heWJlIiAoc2NvcmVkIGFzIDAuNTsgdGhpcyBtaWdodCBoYXZlIG9ubHkgYmVlbiBhdmFpbGFibGUgaW4gc29tZSBzaXRlcz8pLCBvciAieWVzIiAoc2NvcmVkIGFzIDEpLgoKX05vdGU6IEluIGFkZGl0aW9uIHRvIHRoZXNlIDIyIGl0ZW1zLCB0aGVyZSB3ZXJlIHR3byBpdGVtcyBpbmNsdWRlZCBhcyBwYXJ0IG9mIHRoaXMgc2VjdGlvbiBvbiAic3Bpcml0dWFsIGV4cGVyaWVuY2VzIiB0aGF0IHdlcmUgaW50ZW5kZWQgdG8gZ2F1Z2UgcGFydGljaXBhbnRzJyBwcmF5ZXIgcHJhY3RpY2UgLSBzZWUgW1ByYXllciAoc3Bpcml0dWFsIGV4cGVyaWVuY2UgUXVlc3Rpb24gIzEpXSwgYWJvdmUuXwoKIyMgT3ZlcmFsbCBzY29yZXMKCkZpcnN0LCBJJ2xsIGV4YW1pbmUgb3ZlcmFsbCAic2NvcmVzIiBvbiB0aGlzIHNjYWxlLCB0YWtpbmcgaW50byBhY2NvdW50IG9ubHkgdGhlIGJhc2ljIGl0ZW1zIChub3QgdGhlIGZvbGxvdy11cCBxdWVzdGlvbnMpLiAKCkluIFRoYWlsYW5kLCB0aGVyZSB3ZXJlIGFuIGFkZGl0aW9uYWwgMTIgcXVlc2l0b25zIChhYm91dCBleHBlcmllbmNlcyBvZiBhZGRpdGlvbmFsICJiZWluZ3MiKSB0aGF0OyBJIGhhdmUgdHJlYXRlZCB0aGlzIGRpc2NyZXBhbmN5IGFjcm9zcyBzaXRlcyBpbiB0d28gZGlmZmVyZW50IHdheXMgYmVsb3c6ICgxKSBDb25zZGVyaW5nIGFsbCBiZWluZ3MgYW5kIHVzaW5nIHByb3BvcnRpb25zLCByYXRoZXIgdGhhbiBzdW1zLCBhcyAic2NvcmVzIiAoZXF1aXZhbGVudCB0byBhc2tpbmcsIGZvciBlYWNoIHBhcnRpY2lhbnQsIHdoYXQgcHJvcG9ydGlvbiBvZiB0aGUgaXRlbXMgdGhleSB3ZXJlIGV4cG9zZWQgdG8gZGlkIHRoZXkgZW5kb3JzZT8pOyBhbmQgKDIpIENvbnNpZGVyaW5nIG9ubHkgdGhlIGZpcnN0IDUgYmVpbmdzIGFza2VkIGFib3V0IGluIGVhY2ggc2l0ZSwgc3VjaCB0aGF0IGFsbCBwYXJ0aWNpcGFudHMgd2VyZSBhc2tlZCB0aGUgc2FtZSBudW1iZXIgb2YgcXVlc3Rpb25zLgoKIyMgQ29uc2lkZXJpbmcgYWxsICJiZWluZ3MiCgpVc2luZyB0aGUgZmlyc3QgYXBwcm9hY2ggKGNvbnNpZGVyaW5nIGFsbCAiYmVpbmdzLCIgd2l0aCAxMiBtb3JlIGJlaW5ncyBpbiBUaGFpbGFuZCB0aGFuIGluIGFueSBvdGhlciBzaXRlKSwgc2NvcmVzIGNvdWxkIHJhbmdlIGZyb20gMCAoZXF1aXZhbGVudCB0byBzYXlpbmcgIm5vIiBmb3IgYWxsIDIyLTM0IGl0ZW1zKSB0byAxIChlcXVpdmFsZW50IHRvIHNheWluZyAieWVzIiBmb3IgYWxsIDIyLTM0IGl0ZW1zKS4KCmBgYHtyfQpkX3NwZXhfYmFzZV9xMnRvMjNfc2NvcmVkX3Byb3BhbGxfbWIgPC0gZF9zcGV4X2Jhc2VfcTJ0bzIzX3Njb3JlZF9wcm9wYWxsICU+JQogIGdyb3VwX2J5KGVwaV9jdHJ5KSAlPiUKICBtdWx0aV9ib290X3N0YW5kYXJkKCJzY29yZSIpICU+JQogIHVuZ3JvdXAoKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42LCBpbmNsdWRlID0gVH0Kc3BleF9xMnRvMjNfcGxvdF9hIDwtIGdncGxvdChkX3NwZXhfYmFzZV9xMnRvMjNfc2NvcmVkX3Byb3BhbGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZXMoeCA9IGVwaV9jdHJ5LCB5ID0gc2NvcmUsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gZXBpX2N0cnkpKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCoxLCBsdHkgPSAyLCBjb2xvciA9ICJibGFjayIpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLjUqMSwgbHR5ID0gMiwgY29sb3IgPSAiYmxhY2siKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMSoxLCBsdHkgPSAyLCBjb2xvciA9ICJibGFjayIpICsKICBnZW9tX2ppdHRlcihoZWlnaHQgPSAwLCB3aWR0aCA9IDAuNCwgYWxwaGEgPSAwLjIsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fcG9pbnRyYW5nZShkYXRhID0gZF9zcGV4X2Jhc2VfcTJ0bzIzX3Njb3JlZF9wcm9wYWxsX21iLAogICAgICAgICAgICAgICAgICBhZXMoeSA9IG1lYW4sIHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSwKICAgICAgICAgICAgICAgICAgZmF0dGVuID0gMiwgY29sb3IgPSAiYmxhY2siLCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3RleHQoZGF0YSA9IGRhdGEuZnJhbWUoeCA9IDAuNSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IGMoMCoxLCAwLjUqMSwgMSoxKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiID0gYygifiBBbGwgYW5zd2VycyAnbm8nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICJ+IEFsbCBhbnN3ZXJzICdtYXliZSciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ+IEFsbCBhbnN3ZXJzICd5ZXMnIikpLAogICAgICAgICAgICBhZXMoeCA9IHgsIHkgPSB5LCBsYWJlbCA9IGxhYiksCiAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgaGp1c3QgPSAwLCBudWRnZV95ID0gMC4wNSkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMSwgMC4xKSkgKwogIGxhYnModGl0bGUgPSAiU3Bpcml0dWFsIGV4cGVyaWVuY2VzIChRdWVzdGlvbnMgIzItMjMpIiwKICAgICAgIHN1YnRpdGxlID0gIkluY2x1ZGVzIGFsbCBiZWluZ3MgZm9yIFRoYWlsYW5kXG5FcnJvciBiYXJzIGFyZSBib290c3RyYXBwZWQgOTUlIENJcyIsCiAgICAgICB4ID0gIlNpdGUiLCB5ID0gIlByb3BvcnRpb24gc2NvcmUgKHJhbmdlOiAwLTEpIikKCnNwZXhfcTJ0bzIzX3Bsb3RfYiA8LSBnZ3Bsb3QoZF9zcGV4X2Jhc2VfcTJ0bzIzX3Njb3JlZF9wcm9wYWxsX21iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWVzKHggPSBlcGlfY3RyeSwgeSA9IG1lYW4sIGNvbG9yID0gZXBpX2N0cnkpKSArCiAgZ2VvbV9wb2ludHJhbmdlKGFlcyh5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksCiAgICAgICAgICAgICAgICAgIGZhdHRlbiA9IDQsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMSwgMC4xKSkgKwogIGxhYnModGl0bGUgPSAiKHpvb21lZCBpbikiLAogICAgICAgc3VidGl0bGUgPSAiSW5jbHVkZXMgYWxsIGJlaW5ncyBmb3IgVGhhaWxhbmRcbkVycm9yIGJhcnMgYXJlIGJvb3RzdHJhcHBlZCA5NSUgQ0lzIiwKICAgICAgIHggPSAiU2l0ZSIsIHkgPSAiUHJvcG9ydGlvbiBzY29yZSAocmFuZ2U6IDAtMSkiKQoKcGxvdF9ncmlkKHNwZXhfcTJ0bzIzX3Bsb3RfYSwgc3BleF9xMnRvMjNfcGxvdF9iLCBuY29sID0gMikKYGBgCgpGcm9tIHRoZXNlIHBsb3RzLCBpdCBpcyBjbGVhciB0aGF0IHdoaWxlIHRoZXJlIHdhcyBzdWJzdGFudGlhbCB2YXJpYWJpbGl0eSBhY3Jvc3MgaW5kaXZpZHVhbHMgd2l0aGluIGVhY2ggc2l0ZSwgcGFydGljaXBhbnRz4oCZIGF2ZXJhZ2UgcmVzcG9uc2UgYWxzbyB2YXJpZWQgZmFpcmx5IGRyYW1hdGljYWxseSBhY3Jvc3Mgc2l0ZXMsIHdpdGggcGFydGljaXBhbnRzIGluIENoaW5hIGVuZG9yc2luZyB0aGUgZmV3ZXN0IGl0ZW1zLCBwYXJ0aWNpcGFudHMgaW4gdGhlIFVTIGFuZCBUaGFpbGFuZCBlbmRvcnNpbmcgc2xpZ2h0bHkgbW9yZSwgYW5kIHBhcnRpY2lwYW50cyBpbiBHaGFuYSBhbmQgVmFudWF0dSBlbmRvcnNpbmcgdGhlIG1vc3QuIFRoaXMgaXMgdGhlIHNhbWUgcGF0dGVybiB3ZSBvYnNlcnZlZCBmb3IgW1Bvcm9zaXR5XSBzY29yZXMsIGFib3ZlLgoKYGBge3J9CnJfcTJ0bzIzX3Njb3JlZF9wcm9wYWxsIDwtIGxtKHNjb3JlIH4gZXBpX2N0cnksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkX3NwZXhfYmFzZV9xMnRvMjNfc2NvcmVkX3Byb3BhbGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyYXN0cyA9IGxpc3QoZXBpX2N0cnkgPSBjb250cmFzdHNfY3RyeV9jdHIpKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0Kc3VtbWFyeShyX3EydG8yM19zY29yZWRfcHJvcGFsbCkkY29lZmZpY2llbnRzICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1wYXJhbWV0ZXIsIC1wKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSwKICAgICAgICBjYXB0aW9uID0gIkNvbXBhcmluZyBzcGlyaXR1YWwgZXhwZXJpZW5jZSBzY29yZXMgYWNyb3NzIHNpdGVzIFttb2RlbDogbG0oc2NvcmUgfiBlcGlfY3RyeSwgZF9zcGV4X2Jhc2VfcTJ0bzIzX3Njb3JlZF9wcm9wYWxsKV0iKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgcm93X3NwZWMoYygyOjUpLCBib2xkID0gVCkKYGBgCgpgYGB7cn0KIyByX3EydG8yM19wcm9wYWxsX21peGVkIDwtIGxtZXIocmVzcG9uc2UgfiBlcGlfY3RyeSAKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAoMSB8IGVwaV9zdWJqKSArIChlcGlfY3RyeSB8IHF1ZXN0aW9uKSwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZF9zcGV4X2Jhc2VfcTJ0bzIzLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cmFzdHMgPSBsaXN0KGVwaV9jdHJ5ID0gY29udHJhc3RzX2N0cnlfY3RyKSkKIyAKIyBzYXZlUkRTKHJfcTJ0bzIzX3Byb3BhbGxfbWl4ZWQsICIuL21vZGVscy9yX3EydG8yM19wcm9wYWxsX21peGVkLlJEUyIpCgpyX3EydG8yM19wcm9wYWxsX21peGVkIDwtIHJlYWRSRFMoIi4vbW9kZWxzL3JfcTJ0bzIzX3Byb3BhbGxfbWl4ZWQuUkRTIikKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnN1bW1hcnkocl9xMnRvMjNfcHJvcGFsbF9taXhlZCkkY29lZmZpY2llbnRzICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1wYXJhbWV0ZXIsIC1wKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSwKICAgICAgICBjYXB0aW9uID0gIkNvbXBhcmluZyBzcGlyaXR1YWwgZXhwZXJpZW5jZSByZXNwb25zZXMgYWNyb3NzIHNpdGVzIFttb2RlbDogbG1lcihyZXNwb25zZSB+IGVwaV9jdHJ5ICsgKDEgfCBlcGlfc3ViaikgKyAoZXBpX2N0cnkgfCBxdWVzdGlvbiksIGRfc3BleF9iYXNlX3EydG8yMyldIikgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIHJvd19zcGVjKGMoMjo1KSwgYm9sZCA9IFQpCmBgYAoKQWdhaW4sIEkgcmFuIHR3byBraW5kcyBvZiBzdGF0aXN0aWNhbCBhbmFseXNlcyBvZiB0aGVzZSByZXN1bHRzOiBPbmUgY29tcGFyaW5nIHRoZXNlIHNjb3JlcyBhY3Jvc3Mgc2l0ZXMgKHRvcCB0YWJsZSksIGFuZCB0aGUgb3RoZXIgdGFraW5nIGludG8gYWNjb3VudCB2YXJpYWJpbGl0eSBhY3Jvc3MgaW5kaXZpZHVhbCBwYXJ0aWNpcGFudHMgYW5kIGFjcm9zcyBpbmRpdmlkdWFsIGl0ZW1zIGluIHRoZSBzY2FsZSAoYm90dG9tIHRhYmxlKS4gVGhlb3JldGljYWxseSwgdGhlc2UgYW5hbHlzZXMgc2hvdWxkIHlpZWxkIHByZXR0eSBzaW1pbGFyIHJlc3VsdHMsIHNvIEkgd291bGQgYmUgZXNwZWNpYWxseSBjb25maWRlbnQgaW4gZWZmZWN0cyB0aGF0IGFyZSBjb25zaXN0ZW50IGFjcm9zcyB0aGUgdHdvIGFuYWx5c2VzIGFuZCB0aGF0IHNlZW0gb2J2aW91cyBmcm9tIHRoZSBwbG90cy4KCkJvdGggYW5hbHlzZXMgc3VnZ2VzdCB0aGF0IHBhcnRpY2lwYW50cyBpbiBzaXRlcyBvdXRzaWRlIG9mIHRoZSBVUyBnZW5lcmFsbHkgaGFkIHNpZ25pZmljYW50bHkgaGlnaGVyIFBvcm9zaXR5IHNjb3JlcyB0aGFuIHBhcnRpY2lwYW50cyBpbiBHaGFuYSBhbmQgVmFudWF0dSBoYWQgc2lnbmlmaWNhbnRseSBoaWdoZXIgUG9yb3NpdHkgc2NvcmVzIHRoYW4gcGFydGljaXBhbnRzIGluIFRoYWlsYW5kIGFuZCBDaGluYSAoc2VlIOKAnGVwaV9jdHJ5bm9uVVNfVVPigJ0gcm93cyksIGFuZCB0aGF0IHBhcnRpY2lwYW50cyBpbiBUaGFpbGFuZCBoYWQgc2lnbmlmaWNhbnRseSBoaWdoZXIgUG9yb3NpdHkgc2NvcmVzLCBvbiBhdmVyYWdlLCB0aGFuIHBhcnRpY2lwYW50cyBpbiBDaGluYSAoc2VlIOKAnGVwaV9jdHJ5VEhfQ0jigJ0gcm93cykuCgojIyMgQnkgY2hhcmlzbWF0aWMgc3RhdHVzCgpOb3cgSSdsbCBicmVhayB0aGluZ3MgZG93biBieSBwYXJ0aWNpcGFudHMnIGNoYXJpc21hdGljIHN0YXR1cy4KCmBgYHtyfQpkX3NwZXhfYmFzZV9xMnRvMjNfYnljaGFyY19zY29yZWRfcHJvcGFsbF9tYiA8LSBkX3NwZXhfYmFzZV9xMnRvMjNfc2NvcmVkX3Byb3BhbGwgJT4lCiAgZmlsdGVyKCFpcy5uYShlcGlfY2hhcmMpKSAlPiUKICBncm91cF9ieShlcGlfY3RyeSwgZXBpX2NoYXJjKSAlPiUKICBtdWx0aV9ib290X3N0YW5kYXJkKCJzY29yZSIpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBtdXRhdGUoZXBpX2N0cnkgPSByZWNvZGVfY3RyeV9mdW4oZXBpX2N0cnkpKQoKIyBlZmZlY3QtY29kZSBieSBkZWZhdWx0CmNvbnRyYXN0cyhkX3NwZXhfYmFzZV9xMnRvMjNfc2NvcmVkX3Byb3BhbGwkZXBpX2N0cnkpIDwtIGNvbnRyLnN1bSg1KQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42LCBpbmNsdWRlID0gVH0KZG9kZ2Vfd2lkIDwtIDAuOApqaXR0ZXJfd2lkIDwtIDAuOQoKZF9zcGV4X2Jhc2VfcTJ0bzIzX3Njb3JlZF9wcm9wYWxsX3Bsb3RfYSA8LSBkX3NwZXhfYmFzZV9xMnRvMjNfc2NvcmVkX3Byb3BhbGwgJT4lCiAgZmlsdGVyKCFpcy5uYShlcGlfY2hhcmMpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBlcGlfY3RyeSwgeSA9IHNjb3JlLCBjb2xvciA9IGVwaV9jdHJ5LCBzaGFwZSA9IGVwaV9jaGFyYykpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwKjEsIGx0eSA9IDIsIGNvbG9yID0gImJsYWNrIikgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAuNSoxLCBsdHkgPSAyLCBjb2xvciA9ICJibGFjayIpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAxKjEsIGx0eSA9IDIsIGNvbG9yID0gImJsYWNrIikgKwogIGdlb21fcG9pbnQoaGVpZ2h0ID0gMCwgd2lkdGggPSAwLjQsIGFscGhhID0gMC4yLCBzaG93LmxlZ2VuZCA9IEYsCiAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9qaXR0ZXJkb2RnZShqaXR0ZXIud2lkdGggPSBqaXR0ZXJfd2lkLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvZGdlLndpZHRoID0gZG9kZ2Vfd2lkKSkgKwogIGdlb21fcG9pbnRyYW5nZShkYXRhID0gZF9zcGV4X2Jhc2VfcTJ0bzIzX2J5Y2hhcmNfc2NvcmVkX3Byb3BhbGxfbWIsCiAgICAgICAgICAgICAgICAgIGFlcyh5ID0gbWVhbiwgeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIGZhdHRlbiA9IDIsIAogICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gZG9kZ2Vfd2lkKSkgKwogIGdlb21fdGV4dChkYXRhID0gZGF0YS5mcmFtZSh4ID0gMC41LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gYygwKjEsIDAuNSoxLCAxKjEpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWIgPSBjKCJ+IEFsbCBhbnN3ZXJzICdubyciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICJ+IEFsbCBhbnN3ZXJzICdtYXliZSciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ+IEFsbCBhbnN3ZXJzICd5ZXMnIikpLAogICAgICAgICAgICBhZXMoeCA9IHgsIHkgPSB5LCBsYWJlbCA9IGxhYiwgc2hhcGUgPSBOVUxMKSwKICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBoanVzdCA9IDAsIG51ZGdlX3kgPSAwLjA1KSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgc2NhbGVfc2hhcGVfbWFudWFsKCJDaGFyaXNtYXRpYyBzdGF0dXMiLCB2YWx1ZXMgPSBjKDE5LCA4KSkgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMSwgMC4yNSkpICsKICAjIHlsaW0oMCwgMTYpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIikgKwogIGxhYnModGl0bGUgPSAiU3AuIGV4cC4gcHJvcC4gc2NvcmVzIGJ5IHNpdGUgYW5kIGNoYXJpc21hdGljIHN0YXR1cyIsCiAgICAgICBzdWJ0aXRsZSA9ICJFcnJvciBiYXJzIGFyZSBib290c3RyYXBwZWQgOTUlIENJcyIsCiAgICAgICB4ID0gIlNpdGUiLCB5ID0gIlNwaXJpdHVhbCBleHBlcmllbmNlIHByb3BvcnRpb24gc2NvcmUgKHJhbmdlOiAwLTEpIikKCmRfc3BleF9iYXNlX3EydG8yM19zY29yZWRfcHJvcGFsbF9wbG90X2IgPC0gZF9zcGV4X2Jhc2VfcTJ0bzIzX2J5Y2hhcmNfc2NvcmVkX3Byb3BhbGxfbWIgJT4lCiAgbGVmdF9qb2luKGNoYXJjX2NvdW50cykgJT4lCiAgZ2dwbG90KGFlcyh4ID0gZXBpX2N0cnksIGNvbG9yID0gZXBpX2N0cnksIHNoYXBlID0gZXBpX2NoYXJjKSkgKwogICMgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCoxLCBsdHkgPSAyLCBjb2xvciA9ICJibGFjayIpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLjUqMSwgbHR5ID0gMiwgY29sb3IgPSAiYmxhY2siKSArCiAgIyBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAxKjEsIGx0eSA9IDIsIGNvbG9yID0gImJsYWNrIikgKwogIGdlb21fcG9pbnRyYW5nZShhZXMoeSA9IG1lYW4sIHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSwKICAgICAgICAgICAgICAgICAgZmF0dGVuID0gNCwgc2hvdy5sZWdlbmQgPSBGLCAKICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IGRvZGdlX3dpZCkpICsKICBnZW9tX3RleHQoYWVzKGxhYmVsID0gcGFzdGUwKCJuPSIsIG4pLCB5ID0gY2lfbG93ZXIgLSAwLjAyLCAKICAgICAgICAgICAgICAgIHNoYXBlID0gTlVMTCwgZ3JvdXAgPSBlcGlfY2hhcmMpLAogICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gZG9kZ2Vfd2lkKSwgCiAgICAgICAgICAgIHNpemUgPSAzLCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDEsIDAuMjUpKSArCiAgc2NhbGVfc2hhcGVfbWFudWFsKCJDaGFyaXNtYXRpYyBzdGF0dXMiLCB2YWx1ZXMgPSBjKDE5LCA4KSkgKwogIGxhYnModGl0bGUgPSAiKHpvb21lZCBpbikiLAogICAgICAgc3VidGl0bGUgPSAiRXJyb3IgYmFycyBhcmUgYm9vdHN0cmFwcGVkIDk1JSBDSXMiLAogICAgICAgeCA9ICJTaXRlIiwgeSA9ICJTcGlyaXR1YWwgZXhwZXJpZW5jZSBwcm9wb3J0aW9uIHNjb3JlIChyYW5nZTogMC0xKSIpCgpwbG90X2dyaWQocGxvdF9ncmlkKGRfc3BleF9iYXNlX3EydG8yM19zY29yZWRfcHJvcGFsbF9wbG90X2EgKyAKICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgZF9zcGV4X2Jhc2VfcTJ0bzIzX3Njb3JlZF9wcm9wYWxsX3Bsb3RfYiwgbmNvbCA9IDIpLAogICAgICAgICAgZ2V0X2xlZ2VuZChkX3NwZXhfYmFzZV9xMnRvMjNfc2NvcmVkX3Byb3BhbGxfcGxvdF9hKSwgCiAgICAgICAgICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDEsIDAuMSkpCmBgYAoKRnJvbSB0aGVzZSBwbG90cywgaXQgbG9va3MgbGlrZSB0aGUgZ2VuZXJhbCBwYXR0ZXJuIG9mIHNpdGUgZGlmZmVyZW5jZXMgaGVsZCBib3RoIGFtb25nIG5vbi1jaGFyaXNtYXRpY3MgYW5kIGNoYXJpc21hdGljcywgYnV0IHRoYXQgY2hhcmlzbWF0aWNzIHNjb3JlZCBoaWdoZXIgaW4gU3Bpcml0dWFsIEV4cGVyaWVuY2UgdGhhbiBub24tY2hhcmlzbWF0aWNzLCBhY3Jvc3MgdGhlIGJvYXJkLiAoVGhpcyBtYWtlcyBzZW5zZSEpCgpgYGB7cn0Kcl9zcGV4X2Jhc2VfcTJ0bzIzX3Njb3JlZF9wcm9wYWxsX2J5Y2hhcmMgPC0gbG0oc2NvcmUgfiBlcGlfY3RyeSAqIGVwaV9jaGFyYywgCiAgICAgICAgICAgICAgICAgICAgZF9zcGV4X2Jhc2VfcTJ0bzIzX3Njb3JlZF9wcm9wYWxsLAogICAgICAgICAgICAgICAgICAgIGNvbnRyYXN0cyA9IGxpc3QoZXBpX2N0cnkgPSBjb250cmFzdHNfY3RyeV9jdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcGlfY2hhcmMgPSBjb250cmFzdHNfY2hhcmNfZHVtKSkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnN1bW1hcnkocl9zcGV4X2Jhc2VfcTJ0bzIzX3Njb3JlZF9wcm9wYWxsX2J5Y2hhcmMpJGNvZWZmaWNpZW50cyAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtcGFyYW1ldGVyLCAtcCksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIiksCiAgICAgICAgY2FwdGlvbiA9ICJDb21wYXJpbmcgc3Bpcml0dWFsIGV4cGVyaWVuY2Ugc2NvcmVzIGFjcm9zcyBzaXRlcyBhbmQgY2hhcmlzbWF0aWMgc3RhdHVzIFttb2RlbDogbG0oc2NvcmUgfiBlcGlfY3RyeSAqIGVwaV9jaGFyYywgZF9zcGV4X2Jhc2VfcTJ0bzIzX3Njb3JlZF9wcm9wYWxsICU+JSAoLi4uKSldIikgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIHJvd19zcGVjKGMoNjoxMCksIGJvbGQgPSBUKQpgYGAKCmBgYHtyfQojIE1PREVMSU5HIE5PVEVTOgojIG1vZGVsIHdpdGggKGVwaV9jdHJ5ICogZXBpX2NoYXJjIHwgcXVlc3Rpb24pIHRocmV3IHdhcm5pbmcgKGRmPykKIyBtb2RlbCB3aXRoIChlcGlfY3RyeSArIGVwaV9jaGFyYyB8IHF1ZXN0aW9uKSBmYWlsZWQgdG8gY29udmVyZ2Ugd2l0aCAxIG5lZyBlaWdlbnZhbHVlCiMgbW9kZWwgd2l0aCAoZXBpX2N0cnkgfCBxdWVzdGlvbikgZmFpbGVkIHRvIGNvbnZlcmdlIHdpdGggMSBuZWcgZWlnZW52YWx1ZQoKIyByX3Bvcl9taXhlZCA8LSBsbWVyKHJlc3BvbnNlIH4gZXBpX2N0cnkgKiBlcGlfY2hhcmMKIyAgICAgICAgICAgICAgICAgICAgICsgKDEgfCBlcGlfc3ViaikgKyAoZXBpX2N0cnkgfCBxdWVzdGlvbiksCiMgICAgICAgICAgICAgICAgICAgICBkX3BvciAlPiUKIyAgICAgICAgICAgICAgICAgICAgICAgbGVmdF9qb2luKGRfZGVtbyAlPiUgZGlzdGluY3QoZXBpX3N1YmosIGVwaV9jaGFyYykpICU+JQojICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGUoZXBpX2NoYXJjID0gcmVjb2RlX2NoYXJjX2Z1bihlcGlfY2hhcmMpKSAlPiUKIyAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKCFpcy5uYShlcGlfY2hhcmMpKSwKIyAgICAgICAgICAgICAgICAgICAgIGNvbnRyYXN0cyA9IGxpc3QoZXBpX2N0cnkgPSBjb250cmFzdHNfY3RyeV9jdHIsCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVwaV9jaGFyYyA9IGNvbnRyYXN0c19jaGFyY19kdW0pKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0KIyBzdW1tYXJ5KHJfcG9yX21peGVkKSRjb2VmZmljaWVudHMgJT4lCiMgICBkYXRhLmZyYW1lKCkgJT4lCiMgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQojICAgcmVuYW1lKGIgPSBFc3RpbWF0ZSwgYHN0YW5kYXJkIGVycm9yYCA9IFN0ZC4uRXJyb3IsIGB0YCA9IHQudmFsdWUsCiMgICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKIyAgIG11dGF0ZV9hdCh2YXJzKC1wYXJhbWV0ZXIsIC1wKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQojICAgbXV0YXRlKHAgPSBpZmVsc2UocCA8IDAuMDAxLCAiPDAuMDAxIiwgcm91bmQocCwgMykpLAojICAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiMgICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSwKIyAgICAgICAgIGNhcHRpb24gPSAiQ29tcGFyaW5nIHBvcm9zaXR5IHJlc3BvbnNlcyBhY3Jvc3Mgc2l0ZXMgYW5kIGNoYXJpc21hdGljIHN0YXR1cyBbbW9kZWw6IGxtZXIocmVzcG9uc2UgfiBlcGlfY3RyeSAqIGVwaV9jaGFyYyArICgxIHwgZXBpX3N1YmopICsgKGVwaV9jdHJ5ICB8IHF1ZXN0aW9uKV0iKSAlPiUKIyAgIGthYmxlX3N0eWxpbmcoKSAjJT4lCiMgICAjIHJvd19zcGVjKGMoMjo1KSwgYm9sZCA9IFQpCmBgYAoKSSBkaWRuJ3QgdHJ5IHRvIHJ1biB0aGUgc2Vjb25kIGtpbmQgb2YgYW5hbHlzaXMgKHRha2luZyBpbnRvIGFjY291bnQgdmFyaWFiaWxpdHkgYWNyb3NzIGluZGl2aWR1YWwgcGFydGljaXBhbnRzIGFuZCBhY3Jvc3MgaW5kaXZpZHVhbCBpdGVtcyBpbiB0aGUgc2NhbGUpLCBvbmx5IHRoZSBmaXJzdCAodXNpbmcgc3VtIHNjb3JlcyByYXRoZXIgdGhhbiBpbmRpdmlkdWFsIHJlc3BvbnNlcykuIAoKVGhpcyBhbmFseXNpcyBjb25maXJtZWQgdGhhdCBhbGwgb2YgdGhlIGdlbmVyYWwgb2JzZXJ2YXRpb25zIGRpc2N1c3NlZCBpbiB0aGUgcHJldmlvdXMgc2VjdGlvbiBob2xkIHdpdGhpbiB0aGUgbm9uLWNoYXJpc21hdGljIHNhbXBsZXMuIEluIGFkZGl0aW9uLCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcywgY2hhcmlzbWF0aWMgcGFydGljaXBhbnRzIHRlbmRlZCB0byBoYXZlIGhpZ2hlciBQb3Jvc2l0eSBzY29yZXMgKHNlZSAiZXBpX2NoYXJjY2hhcmNfbm9uIiByb3cpLCBhbmQgdGhpcyBkaWZmZXJlbmNlIHdhcyBtb3JlIHByb25vdW5jZWQgaW4gbm9uLVVTIHNhbXBsZXMgdGhhbiBpbiB0aGUgVVMgc2FtcGxlIChzZWUgInJfc3BleF9iYXNlX3EydG8yM19zY29yZWRfcHJvcGFsbF9ieWNoYXJjIiByb3cpLCBhbmQgbW9yZSBwcm9ub3VuY2VkIGluIFRoYWlsYW5kIGFuZCBDaGluYSB0aGFuIGluIEdoYW5hIGFuZCBWYW51YXR1IChzZWUgImVwaV9jdHJ5R0hWVF9USENIOmVwaV9jaGFyY2NoYXJjX25vbiIpLiAKCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMjIENvbnNpZGVyaW5nIGZpcnN0IGZpdmUgImJlaW5ncyIgb25seQoKVXNpbmcgdGhlIHNlY29uZCBhcHByb2FjaCAoY29uc2lkZXJpbmcgb25seSB0aGUgZmlyc3QgZml2ZSAiYmVpbmdzIiBpbiBlYWNoIHNpdGUpLCBzY29yZXMgY291bGQgcmFuZ2UgZnJvbSAwIChlcXVpdmFsZW50IHRvIHNheWluZyAibm8iIGZvciBhbGwgMjIgaXRlbXMpIHRvIDIyIChlcXVpdmFsZW50IHRvIHNheWluZyAieWVzIiBmb3IgYWxsIDIyIGl0ZW1zKS4KCmBgYHtyfQpkX3NwZXhfYmFzZV9xMnRvMjNfc2NvcmVkX2ZpcnN0NV9tYiA8LSBkX3NwZXhfYmFzZV9xMnRvMjNfc2NvcmVkX2ZpcnN0NSAlPiUKICBncm91cF9ieShlcGlfY3RyeSkgJT4lCiAgbXVsdGlfYm9vdF9zdGFuZGFyZCgic2NvcmUiKSAlPiUKICB1bmdyb3VwKCkKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNiwgaW5jbHVkZSA9IFR9CnNwZXhfcTJ0bzIzX3Bsb3RfYyA8LSBnZ3Bsb3QoZF9zcGV4X2Jhc2VfcTJ0bzIzX3Njb3JlZF9maXJzdDUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZXMoeCA9IGVwaV9jdHJ5LCB5ID0gc2NvcmUsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gZXBpX2N0cnkpKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCoyMiwgbHR5ID0gMiwgY29sb3IgPSAiYmxhY2siKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMC41KjIyLCBsdHkgPSAyLCBjb2xvciA9ICJibGFjayIpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAxKjIyLCBsdHkgPSAyLCBjb2xvciA9ICJibGFjayIpICsKICBnZW9tX2ppdHRlcihoZWlnaHQgPSAwLCB3aWR0aCA9IDAuNCwgYWxwaGEgPSAwLjIsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fcG9pbnRyYW5nZShkYXRhID0gZF9zcGV4X2Jhc2VfcTJ0bzIzX3Njb3JlZF9maXJzdDVfbWIsCiAgICAgICAgICAgICAgICAgIGFlcyh5ID0gbWVhbiwgeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLAogICAgICAgICAgICAgICAgICBmYXR0ZW4gPSAyLCBjb2xvciA9ICJibGFjayIsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fdGV4dChkYXRhID0gZGF0YS5mcmFtZSh4ID0gMC41LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gYygwKjIyLCAwLjUqMjIsIDEqMjIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWIgPSBjKCJ+IEFsbCBhbnN3ZXJzICdubyciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgIn4gQWxsIGFuc3dlcnMgJ21heWJlJyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIn4gQWxsIGFuc3dlcnMgJ3llcyciKSksCiAgICAgICAgICAgIGFlcyh4ID0geCwgeSA9IHksIGxhYmVsID0gbGFiKSwKICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBoanVzdCA9IDAsIG51ZGdlX3kgPSAxKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCAyMiwgMikpICsKICBsYWJzKHRpdGxlID0gIlNwaXJpdHVhbCBleHBlcmllbmNlcyAoUXVlc3Rpb25zICMyLTIzKSIsCiAgICAgICBzdWJ0aXRsZSA9ICJJbmNsdWRlcyBmaXJzdCBmaXZlIGJlaW5ncyBmb3IgYWxsIHNpdGVzXG5FcnJvciBiYXJzIGFyZSBib290c3RyYXBwZWQgOTUlIENJcyIsCiAgICAgICB4ID0gIlNpdGUiLCB5ID0gIlN1bSBzY29yZSAocmFuZ2U6IDAtMjIpIikKCnNwZXhfcTJ0bzIzX3Bsb3RfZCA8LSBnZ3Bsb3QoZF9zcGV4X2Jhc2VfcTJ0bzIzX3Njb3JlZF9maXJzdDVfbWIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZXMoeCA9IGVwaV9jdHJ5LCB5ID0gbWVhbiwgY29sb3IgPSBlcGlfY3RyeSkpICsKICBnZW9tX3BvaW50cmFuZ2UoYWVzKHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSwKICAgICAgICAgICAgICAgICAgZmF0dGVuID0gNCwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCAyMiwgMikpICsKICBsYWJzKHRpdGxlID0gIih6b29tZWQgaW4pIiwKICAgICAgIHN1YnRpdGxlID0gIkluY2x1ZGVzIGZpcnN0IGZpdmUgYmVpbmdzIGZvciBhbGwgc2l0ZXNcbkVycm9yIGJhcnMgYXJlIGJvb3RzdHJhcHBlZCA5NSUgQ0lzIiwKICAgICAgIHggPSAiU2l0ZSIsIHkgPSAiU3VtIHNjb3JlIChyYW5nZTogMC0yMikiKQoKcGxvdF9ncmlkKHNwZXhfcTJ0bzIzX3Bsb3RfYywgc3BleF9xMnRvMjNfcGxvdF9kLCBuY29sID0gMikKYGBgCgpUaGVzZSBwbG90cyBsb29rIHZlcnkgc2ltaWxhciB0byB0aGUgcGxvdHMgY29uc2lkZXJpbmcgYWxsIGJlaW5ncyAod2hpY2ggSSBmaW5kIHJlYXNzdXJpbmcpLgoKYGBge3J9CnJfcTJ0bzIzX3Njb3JlZF9maXJzdDUgPC0gbG0oc2NvcmUgfiBlcGlfY3RyeSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZF9zcGV4X2Jhc2VfcTJ0bzIzX3Njb3JlZF9maXJzdDUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJhc3RzID0gbGlzdChlcGlfY3RyeSA9IGNvbnRyYXN0c19jdHJ5X2N0cikpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpzdW1tYXJ5KHJfcTJ0bzIzX3Njb3JlZF9maXJzdDUpJGNvZWZmaWNpZW50cyAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtcGFyYW1ldGVyLCAtcCksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIiksCiAgICAgICAgY2FwdGlvbiA9ICJDb21wYXJpbmcgc3Bpcml0dWFsIGV4cGVyaWVuY2Ugc2NvcmVzIGFjcm9zcyBzaXRlcyBbbW9kZWw6IGxtKHNjb3JlIH4gZXBpX2N0cnksIGRfc3BleF9iYXNlX3EydG8yM19zY29yZWRfZmlyc3Q1KV0iKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgcm93X3NwZWMoYygyOjUpLCBib2xkID0gVCkKYGBgCgpgYGB7cn0KIyByX3EydG8yM19maXJzdDVfbWl4ZWQgPC0gbG1lcihyZXNwb25zZSB+IGVwaV9jdHJ5IAojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgKDEgfCBlcGlfc3ViaikgKyAoZXBpX2N0cnkgfCBxdWVzdGlvbiksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZF9zcGV4X2Jhc2VfcTJ0bzIzICU+JQojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKCFxdWVzdGlvbiAlaW4lIAojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYygiZXBpXzJfdGhsMTJlIiwgImVwaV8yX3RobDEyZiIsIAojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXBpXzJfdGhsMTJnIiwgImVwaV8yX3RobDEyaCIsIAojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXBpXzJfdGhsMTJpIiwgImVwaV8yX3RobDEyaiIsCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlcGlfMl90aGwxMmsiKSksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJhc3RzID0gbGlzdChlcGlfY3RyeSA9IGNvbnRyYXN0c19jdHJ5X2N0cikpCiMgCiMgc2F2ZVJEUyhyX3EydG8yM19maXJzdDVfbWl4ZWQsICIuL21vZGVscy9yX3EydG8yM19maXJzdDVfbWl4ZWQuUkRTIikKCnJfcTJ0bzIzX2ZpcnN0NV9taXhlZCA8LSByZWFkUkRTKCIuL21vZGVscy9yX3EydG8yM19maXJzdDVfbWl4ZWQuUkRTIikKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IEZ9CnN1bW1hcnkocl9xMnRvMjNfZmlyc3Q1X21peGVkKSRjb2VmZmljaWVudHMgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgcmVuYW1lKGIgPSBFc3RpbWF0ZSwgYHN0YW5kYXJkIGVycm9yYCA9IFN0ZC4uRXJyb3IsIGB0YCA9IHQudmFsdWUsCiAgICAgICAgIHAgPSBQci4uLnQuLikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoLXBhcmFtZXRlciwgLXApLCBmdW5zKHJvdW5kKC4sIDIpKSkgJT4lCiAgbXV0YXRlKHAgPSBpZmVsc2UocCA8IDAuMDAxLCAiPDAuMDAxIiwgcm91bmQocCwgMykpLAogICAgICAgICBzaWduaWZpY2FudCA9IGlmZWxzZShwIDwgMC4wNSwgIioiLCAiIikpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpLAogICAgICAgIGNhcHRpb24gPSAiQ29tcGFyaW5nIHNwaXJpdHVhbCBleHBlcmllbmNlIHJlc3BvbnNlcyBhY3Jvc3Mgc2l0ZXMgW21vZGVsOiBsbWVyKHJlc3BvbnNlIH4gZXBpX2N0cnkgKyAoMSB8IGVwaV9zdWJqKSArIChlcGlfY3RyeSB8IHF1ZXN0aW9uKSwgZF9zcGV4X2Jhc2VfcTJ0bzIzICU+JSBmaWx0ZXIoLi4uKSldIikgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIHJvd19zcGVjKGMoMjo1KSwgYm9sZCA9IFQpCmBgYAoKVGhpcyBwYXR0ZXJuIG9mIHJlc3VsdHMgYXJlIGlkZW50aWNhbCB0byB0aGUgcGF0dGVybiBvZiByZXN1bHRzIGNvbnNpZGVyaW5nIGFsbCBiZWluZ3MgKHdoaWNoLCBhZ2FpbiwgSSBmaW5kIHJlYXNzdXJpbmcpLgoKIyMjIEJ5IGNoYXJpc21hdGljIHN0YXR1cwoKTm93IEknbGwgYnJlYWsgdGhpbmdzIGRvd24gYnkgcGFydGljaXBhbnRzJyBjaGFyaXNtYXRpYyBzdGF0dXMuCgpgYGB7cn0KZF9zcGV4X2Jhc2VfcTJ0bzIzX2J5Y2hhcmNfc2NvcmVkX2ZpcnN0NV9tYiA8LSBkX3NwZXhfYmFzZV9xMnRvMjNfc2NvcmVkX2ZpcnN0NSAlPiUKICBmaWx0ZXIoIWlzLm5hKGVwaV9jaGFyYykpICU+JQogIGdyb3VwX2J5KGVwaV9jdHJ5LCBlcGlfY2hhcmMpICU+JQogIG11bHRpX2Jvb3Rfc3RhbmRhcmQoInNjb3JlIikgJT4lCiAgdW5ncm91cCgpICU+JQogIG11dGF0ZShlcGlfY3RyeSA9IHJlY29kZV9jdHJ5X2Z1bihlcGlfY3RyeSkpCgojIGVmZmVjdC1jb2RlIGJ5IGRlZmF1bHQKY29udHJhc3RzKGRfc3BleF9iYXNlX3EydG8yM19zY29yZWRfZmlyc3Q1JGVwaV9jdHJ5KSA8LSBjb250ci5zdW0oNSkKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNiwgaW5jbHVkZSA9IFR9CmRvZGdlX3dpZCA8LSAwLjgKaml0dGVyX3dpZCA8LSAwLjkKCmRfc3BleF9iYXNlX3EydG8yM19zY29yZWRfZmlyc3Q1X3Bsb3RfYSA8LSBkX3NwZXhfYmFzZV9xMnRvMjNfc2NvcmVkX2ZpcnN0NSAlPiUKICBmaWx0ZXIoIWlzLm5hKGVwaV9jaGFyYykpICU+JQogIGdncGxvdChhZXMoeCA9IGVwaV9jdHJ5LCB5ID0gc2NvcmUsIGNvbG9yID0gZXBpX2N0cnksIHNoYXBlID0gZXBpX2NoYXJjKSkgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAqMjIsIGx0eSA9IDIsIGNvbG9yID0gImJsYWNrIikgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAuNSoyMiwgbHR5ID0gMiwgY29sb3IgPSAiYmxhY2siKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMSoyMiwgbHR5ID0gMiwgY29sb3IgPSAiYmxhY2siKSArCiAgZ2VvbV9wb2ludChoZWlnaHQgPSAwLCB3aWR0aCA9IDAuNCwgYWxwaGEgPSAwLjIsIHNob3cubGVnZW5kID0gRiwKICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2ppdHRlcmRvZGdlKGppdHRlci53aWR0aCA9IGppdHRlcl93aWQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9kZ2Uud2lkdGggPSBkb2RnZV93aWQpKSArCiAgZ2VvbV9wb2ludHJhbmdlKGRhdGEgPSBkX3NwZXhfYmFzZV9xMnRvMjNfYnljaGFyY19zY29yZWRfZmlyc3Q1X21iLAogICAgICAgICAgICAgICAgICBhZXMoeSA9IG1lYW4sIHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSwKICAgICAgICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBmYXR0ZW4gPSAyLCAKICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IGRvZGdlX3dpZCkpICsKICBnZW9tX3RleHQoZGF0YSA9IGRhdGEuZnJhbWUoeCA9IDAuNSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IGMoMCoyMiwgMC41KjIyLCAxKjIyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiID0gYygifiBBbGwgYW5zd2VycyAnbm8nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAifiBBbGwgYW5zd2VycyAnbWF5YmUnIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAifiBBbGwgYW5zd2VycyAneWVzJyIpKSwKICAgICAgICAgICAgYWVzKHggPSB4LCB5ID0geSwgbGFiZWwgPSBsYWIsIHNoYXBlID0gTlVMTCksCiAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgaGp1c3QgPSAwLCBudWRnZV95ID0gMSkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIHNjYWxlX3NoYXBlX21hbnVhbCgiQ2hhcmlzbWF0aWMgc3RhdHVzIiwgdmFsdWVzID0gYygxOSwgOCkpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDIyLCAyKSkgKwogICMgeWxpbSgwLCAxNikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSArCiAgbGFicyh0aXRsZSA9ICJTcC4gZXhwLiBzdW0uIHNjb3JlcyBieSBzaXRlIGFuZCBjaGFyaXNtYXRpYyBzdGF0dXMiLAogICAgICAgc3VidGl0bGUgPSAiRXJyb3IgYmFycyBhcmUgYm9vdHN0cmFwcGVkIDk1JSBDSXMiLAogICAgICAgeCA9ICJTaXRlIiwgeSA9ICJTcGlyaXR1YWwgZXhwZXJpZW5jZSBzdW0gc2NvcmUgKHJhbmdlOiAwLTIyKSIpCgpkX3NwZXhfYmFzZV9xMnRvMjNfc2NvcmVkX2ZpcnN0NV9wbG90X2IgPC0gZF9zcGV4X2Jhc2VfcTJ0bzIzX2J5Y2hhcmNfc2NvcmVkX2ZpcnN0NV9tYiAlPiUKICBsZWZ0X2pvaW4oY2hhcmNfY291bnRzKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBlcGlfY3RyeSwgY29sb3IgPSBlcGlfY3RyeSwgc2hhcGUgPSBlcGlfY2hhcmMpKSArCiAgIyBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwKjIyLCBsdHkgPSAyLCBjb2xvciA9ICJibGFjayIpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLjUqMjIsIGx0eSA9IDIsIGNvbG9yID0gImJsYWNrIikgKwogICMgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMSoyMiwgbHR5ID0gMiwgY29sb3IgPSAiYmxhY2siKSArCiAgZ2VvbV9wb2ludHJhbmdlKGFlcyh5ID0gbWVhbiwgeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLAogICAgICAgICAgICAgICAgICBmYXR0ZW4gPSA0LCBzaG93LmxlZ2VuZCA9IEYsIAogICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gZG9kZ2Vfd2lkKSkgKwogIGdlb21fdGV4dChhZXMobGFiZWwgPSBwYXN0ZTAoIm49IiwgbiksIHkgPSBjaV9sb3dlciAtIDAuMjUsIAogICAgICAgICAgICAgICAgc2hhcGUgPSBOVUxMLCBncm91cCA9IGVwaV9jaGFyYyksCiAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSBkb2RnZV93aWQpLCAKICAgICAgICAgICAgc2l6ZSA9IDMsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMjIsIDEpKSArCiAgc2NhbGVfc2hhcGVfbWFudWFsKCJDaGFyaXNtYXRpYyBzdGF0dXMiLCB2YWx1ZXMgPSBjKDE5LCA4KSkgKwogIGxhYnModGl0bGUgPSAiKHpvb21lZCBpbikiLAogICAgICAgc3VidGl0bGUgPSAiRXJyb3IgYmFycyBhcmUgYm9vdHN0cmFwcGVkIDk1JSBDSXMiLAogICAgICAgeCA9ICJTaXRlIiwgeSA9ICJTcGlyaXR1YWwgZXhwZXJpZW5jZSBzdW0gc2NvcmUgKHJhbmdlOiAwLTIyKSIpCgpwbG90X2dyaWQocGxvdF9ncmlkKGRfc3BleF9iYXNlX3EydG8yM19zY29yZWRfZmlyc3Q1X3Bsb3RfYSArIAogICAgICAgICAgICAgICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwKICAgICAgICAgICAgICAgICAgICBkX3NwZXhfYmFzZV9xMnRvMjNfc2NvcmVkX2ZpcnN0NV9wbG90X2IsIG5jb2wgPSAyKSwKICAgICAgICAgIGdldF9sZWdlbmQoZF9zcGV4X2Jhc2VfcTJ0bzIzX3Njb3JlZF9maXJzdDVfcGxvdF9hKSwgbmNvbCA9IDEsIAogICAgICAgICAgcmVsX2hlaWdodHMgPSBjKDEsIDAuMSkpCmBgYAoKQWdhaW4sIGZyb20gdGhlc2UgcGxvdHMsIGl0IGxvb2tzIGxpa2UgdGhlIGdlbmVyYWwgcGF0dGVybiBvZiBzaXRlIGRpZmZlcmVuY2VzIGhlbGQgYm90aCBhbW9uZyBub24tY2hhcmlzbWF0aWNzIGFuZCBjaGFyaXNtYXRpY3MsIGJ1dCB0aGF0IGNoYXJpc21hdGljcyBzY29yZWQgaGlnaGVyIGluIFNwaXJpdHVhbCBFeHBlcmllbmNlIHRoYW4gbm9uLWNoYXJpc21hdGljcywgYWNyb3NzIHRoZSBib2FyZC4gKFRoaXMgbWFrZXMgc2Vuc2UhKQoKYGBge3J9CnJfc3BleF9iYXNlX3EydG8yM19zY29yZWRfZmlyc3Q1X2J5Y2hhcmMgPC0gbG0oc2NvcmUgfiBlcGlfY3RyeSAqIGVwaV9jaGFyYywgCiAgICAgICAgICAgICAgICAgICAgZF9zcGV4X2Jhc2VfcTJ0bzIzX3Njb3JlZF9maXJzdDUsCiAgICAgICAgICAgICAgICAgICAgY29udHJhc3RzID0gbGlzdChlcGlfY3RyeSA9IGNvbnRyYXN0c19jdHJ5X2N0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVwaV9jaGFyYyA9IGNvbnRyYXN0c19jaGFyY19kdW0pKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0Kc3VtbWFyeShyX3NwZXhfYmFzZV9xMnRvMjNfc2NvcmVkX2ZpcnN0NV9ieWNoYXJjKSRjb2VmZmljaWVudHMgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgcmVuYW1lKGIgPSBFc3RpbWF0ZSwgYHN0YW5kYXJkIGVycm9yYCA9IFN0ZC4uRXJyb3IsIGB0YCA9IHQudmFsdWUsCiAgICAgICAgIHAgPSBQci4uLnQuLikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoLXBhcmFtZXRlciwgLXApLCBmdW5zKHJvdW5kKC4sIDIpKSkgJT4lCiAgbXV0YXRlKHAgPSBpZmVsc2UocCA8IDAuMDAxLCAiPDAuMDAxIiwgcm91bmQocCwgMykpLAogICAgICAgICBzaWduaWZpY2FudCA9IGlmZWxzZShwIDwgMC4wNSwgIioiLCAiIikpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpLAogICAgICAgIGNhcHRpb24gPSAiQ29tcGFyaW5nIHNwaXJpdHVhbCBleHBlcmllbmNlIHNjb3JlcyBhY3Jvc3Mgc2l0ZXMgYW5kIGNoYXJpc21hdGljIHN0YXR1cyBbbW9kZWw6IGxtKHNjb3JlIH4gZXBpX2N0cnkgKiBlcGlfY2hhcmMsIGRfc3BleF9iYXNlX3EydG8yM19zY29yZWRfZmlyc3Q1ICU+JSAoLi4uKSldIikgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIHJvd19zcGVjKGMoNjoxMCksIGJvbGQgPSBUKQpgYGAKCmBgYHtyfQojIE1PREVMSU5HIE5PVEVTOgojIG1vZGVsIHdpdGggKGVwaV9jdHJ5ICogZXBpX2NoYXJjIHwgcXVlc3Rpb24pIHRocmV3IHdhcm5pbmcgKGRmPykKIyBtb2RlbCB3aXRoIChlcGlfY3RyeSArIGVwaV9jaGFyYyB8IHF1ZXN0aW9uKSBmYWlsZWQgdG8gY29udmVyZ2Ugd2l0aCAxIG5lZyBlaWdlbnZhbHVlCiMgbW9kZWwgd2l0aCAoZXBpX2N0cnkgfCBxdWVzdGlvbikgZmFpbGVkIHRvIGNvbnZlcmdlIHdpdGggMSBuZWcgZWlnZW52YWx1ZQoKIyByX3Bvcl9taXhlZCA8LSBsbWVyKHJlc3BvbnNlIH4gZXBpX2N0cnkgKiBlcGlfY2hhcmMKIyAgICAgICAgICAgICAgICAgICAgICsgKDEgfCBlcGlfc3ViaikgKyAoZXBpX2N0cnkgfCBxdWVzdGlvbiksCiMgICAgICAgICAgICAgICAgICAgICBkX3BvciAlPiUKIyAgICAgICAgICAgICAgICAgICAgICAgbGVmdF9qb2luKGRfZGVtbyAlPiUgZGlzdGluY3QoZXBpX3N1YmosIGVwaV9jaGFyYykpICU+JQojICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGUoZXBpX2NoYXJjID0gcmVjb2RlX2NoYXJjX2Z1bihlcGlfY2hhcmMpKSAlPiUKIyAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKCFpcy5uYShlcGlfY2hhcmMpKSwKIyAgICAgICAgICAgICAgICAgICAgIGNvbnRyYXN0cyA9IGxpc3QoZXBpX2N0cnkgPSBjb250cmFzdHNfY3RyeV9jdHIsCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVwaV9jaGFyYyA9IGNvbnRyYXN0c19jaGFyY19kdW0pKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0KIyBzdW1tYXJ5KHJfcG9yX21peGVkKSRjb2VmZmljaWVudHMgJT4lCiMgICBkYXRhLmZyYW1lKCkgJT4lCiMgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQojICAgcmVuYW1lKGIgPSBFc3RpbWF0ZSwgYHN0YW5kYXJkIGVycm9yYCA9IFN0ZC4uRXJyb3IsIGB0YCA9IHQudmFsdWUsCiMgICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKIyAgIG11dGF0ZV9hdCh2YXJzKC1wYXJhbWV0ZXIsIC1wKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQojICAgbXV0YXRlKHAgPSBpZmVsc2UocCA8IDAuMDAxLCAiPDAuMDAxIiwgcm91bmQocCwgMykpLAojICAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiMgICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSwKIyAgICAgICAgIGNhcHRpb24gPSAiQ29tcGFyaW5nIHBvcm9zaXR5IHJlc3BvbnNlcyBhY3Jvc3Mgc2l0ZXMgYW5kIGNoYXJpc21hdGljIHN0YXR1cyBbbW9kZWw6IGxtZXIocmVzcG9uc2UgfiBlcGlfY3RyeSAqIGVwaV9jaGFyYyArICgxIHwgZXBpX3N1YmopICsgKGVwaV9jdHJ5ICB8IHF1ZXN0aW9uKV0iKSAlPiUKIyAgIGthYmxlX3N0eWxpbmcoKSAjJT4lCiMgICAjIHJvd19zcGVjKGMoMjo1KSwgYm9sZCA9IFQpCmBgYAoKSSBkaWRuJ3QgdHJ5IHRvIHJ1biB0aGUgc2Vjb25kIGtpbmQgb2YgYW5hbHlzaXMgKHRha2luZyBpbnRvIGFjY291bnQgdmFyaWFiaWxpdHkgYWNyb3NzIGluZGl2aWR1YWwgcGFydGljaXBhbnRzIGFuZCBhY3Jvc3MgaW5kaXZpZHVhbCBpdGVtcyBpbiB0aGUgc2NhbGUpLCBvbmx5IHRoZSBmaXJzdCAodXNpbmcgc3VtIHNjb3JlcyByYXRoZXIgdGhhbiBpbmRpdmlkdWFsIHJlc3BvbnNlcykuIAoKVGhpcyBhbmFseXNpcyBjb25maXJtZWQgdGhhdCBhbGwgb2YgdGhlIGdlbmVyYWwgb2JzZXJ2YXRpb25zIGRpc2N1c3NlZCBpbiB0aGUgcHJldmlvdXMgc2VjdGlvbiBob2xkIHdpdGhpbiB0aGUgbm9uLWNoYXJpc21hdGljIHNhbXBsZXMuIEluIGFkZGl0aW9uLCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcywgY2hhcmlzbWF0aWMgcGFydGljaXBhbnRzIHRlbmRlZCB0byBoYXZlIGhpZ2hlciBQb3Jvc2l0eSBzY29yZXMgKHNlZSAiZXBpX2NoYXJjY2hhcmNfbm9uIiByb3cpLCBhbmQgdGhpcyBkaWZmZXJlbmNlIHdhcyBtb3JlIHByb25vdW5jZWQgaW4gbm9uLVVTIHNhbXBsZXMgdGhhbiBpbiB0aGUgVVMgc2FtcGxlIChzZWUgInJfc3BleF9iYXNlX3EydG8yM19zY29yZWRfZmlyc3Q1X2J5Y2hhcmMiIHJvdyksIGFuZCBtb3JlIHByb25vdW5jZWQgaW4gVGhhaWxhbmQgYW5kIENoaW5hIHRoYW4gaW4gR2hhbmEgYW5kIFZhbnVhdHUgKHNlZSAiZXBpX2N0cnlHSFZUX1RIQ0g6ZXBpX2NoYXJjY2hhcmNfbm9uIikuIAoKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KKipJbiB0aGUgZm9sbG93aW5nIGZvdXIgc2VjdGlvbnMgKFtTcGlyaXR1YWwgZXhwZXJpZW5jZXM6IFVuaXZlcnNhbCBxdWVzdGlvbnMsIHNldCAxIChRdWVzdGlvbnMgIzItMTApXSwgW1NwaXJpdHVhbCBleHBlcmllbmNlczogQmVpbmdzIHF1ZXN0aW9ucyAoUXVlc3Rpb25zICMxMS0xNSArIG1vcmUgZm9yIFRoYWlsYW5kKV0sIFtTcGlyaXR1YWwgZXhwZXJpZW5jZXM6IFVuaXZlcnNhbCBxdWVzdGlvbnMsIHNldCAyIChRdWVzdGlvbnMgIzE2LTIxKV0sIGFuZCBbU3Bpcml0dWFsIGV4cGVyaWVuY2VzOiBVbml2ZXJzYWwgcXVlc3Rpb25zLCBzZXQgMyAoUXVlc3Rpb25zICMyMi0yMyldKSwgSSBsb29rIGF0IHNjb3JlcyBmb3Igc3ViLXNlY3Rpb25zIG9mIHRoZSBTcGlyaXR1YWwgRXhwZXJpZW5jZSBzY2FsZSwgYW5kIGF0IHJlc3BvbnNlcyB0byBpbmRpdmlkdWFsIGl0ZW1zIGluIHRoaXMgc2NhbGUsIGluY2x1ZGluZyBmb2xsb3ctdXAgaXRlbXMuKiogSSBkbyBub3QgcHJvdmlkZSB0ZXh0IGNvbW1lbnRhcnkgb24gdGhlc2UgYWRkaXRpb25hbCBwbG90cyBhbmQgYW5hbHlzZXMgYXQgdGhpcyB0aW1lLCBidXQgdGhleSBhbGwgZm9sbG93IHRoZSBzYW1lIGxvZ2ljIGFzIHRoZSBwbG90cyBhbmQgYW5hbHlzZXMgdGhhdCBJIGhhdmUgYW5ub3RhdGVkIGFib3ZlLgoKCiMgU3Bpcml0dWFsIGV4cGVyaWVuY2VzOiBVbml2ZXJzYWwgcXVlc3Rpb25zLCBzZXQgMSAoUXVlc3Rpb25zICMyLTEwKQoKIyMgT3ZlcmFsbCBzY29yZXMKCmBgYHtyfQpkX3NwZXhfYmFzZV9xMnRvMTBfc2NvcmVkX21iIDwtIGRfc3BleF9iYXNlX3EydG8xMF9zY29yZWQgJT4lCiAgZmlsdGVyKCFpcy5uYShlcGlfY2hhcmMpKSAlPiUKICBncm91cF9ieShlcGlfY3RyeSwgZXBpX2NoYXJjKSAlPiUKICBtdWx0aV9ib290X3N0YW5kYXJkKCJzY29yZSIpICU+JQogIHVuZ3JvdXAoKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42LCBpbmNsdWRlID0gVH0Kc3BleF8ydG8xMF9wbG90X2EgPC0gZ2dwbG90KGRfc3BleF9iYXNlX3EydG8xMF9zY29yZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZXMoeCA9IGVwaV9jdHJ5LCB5ID0gc2NvcmUsIGNvbG9yID0gZXBpX2N0cnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGUgPSBlcGlfY2hhcmMpKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCo5LCBsdHkgPSAyLCBjb2xvciA9ICJibGFjayIpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLjUqOSwgbHR5ID0gMiwgY29sb3IgPSAiYmxhY2siKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMSo5LCBsdHkgPSAyLCBjb2xvciA9ICJibGFjayIpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC4yLCBzaG93LmxlZ2VuZCA9IEYsCiAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2ppdHRlcmRvZGdlKGppdHRlci53aWR0aCA9IGppdHRlcl93aWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppdHRlci5oZWlnaHQgPSAwLjEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvZGdlLndpZHRoID0gZG9kZ2Vfd2lkKSkgKwogIGdlb21fcG9pbnRyYW5nZShkYXRhID0gZF9zcGV4X2Jhc2VfcTJ0bzEwX3Njb3JlZF9tYiwKICAgICAgICAgICAgICAgICAgYWVzKHkgPSBtZWFuLCB5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksCiAgICAgICAgICAgICAgICAgIGZhdHRlbiA9IDIsIGNvbG9yID0gImJsYWNrIiwgc2hvdy5sZWdlbmQgPSBULAogICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gZG9kZ2Vfd2lkKSkgKwogIGdlb21fdGV4dChkYXRhID0gZGF0YS5mcmFtZSh4ID0gMC41LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gYygwKjksIDAuNSo5LCAxKjkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWIgPSBjKCJ+IEFsbCBhbnN3ZXJzICdubyciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgIn4gQWxsIGFuc3dlcnMgJ21heWJlJyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIn4gQWxsIGFuc3dlcnMgJ3llcyciKSksCiAgICAgICAgICAgIGFlcyh4ID0geCwgeSA9IHksIGxhYmVsID0gbGFiLCBzaGFwZSA9IE5VTEwpLAogICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIGhqdXN0ID0gMCwgbnVkZ2VfeSA9IDAuNSkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgOSwgMSkpICsKICBzY2FsZV9zaGFwZV9tYW51YWwoIkNoYXJpc21hdGljIHN0YXR1cyIsIHZhbHVlcyA9IGMoMTksIDgpKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpICsKICBsYWJzKHRpdGxlID0gIlNwaXJpdHVhbCBleHBlcmllbmNlcyAoUXVlc3Rpb25zICMyLTEwKSIsCiAgICAgICBzdWJ0aXRsZSA9ICJFcnJvciBiYXJzIGFyZSBib290c3RyYXBwZWQgOTUlIENJcyIsCiAgICAgICB4ID0gIlNpdGUiLCB5ID0gIlNjb3JlIChyYW5nZTogMC05KSIpCgpzcGV4XzJ0bzEwX3Bsb3RfYiA8LSBnZ3Bsb3QoZF9zcGV4X2Jhc2VfcTJ0bzEwX3Njb3JlZF9tYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFlcyh4ID0gZXBpX2N0cnksIHkgPSBtZWFuLCBjb2xvciA9IGVwaV9jdHJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXBlID0gZXBpX2NoYXJjKSkgKwogICMgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCo5LCBsdHkgPSAyLCBjb2xvciA9ICJibGFjayIpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLjUqOSwgbHR5ID0gMiwgY29sb3IgPSAiYmxhY2siKSArCiAgIyBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAxKjksIGx0eSA9IDIsIGNvbG9yID0gImJsYWNrIikgKwogIGdlb21fcG9pbnRyYW5nZShhZXMoeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLAogICAgICAgICAgICAgICAgICBmYXR0ZW4gPSA0LCBzaG93LmxlZ2VuZCA9IEYsCiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2UoZG9kZ2Vfd2lkKSkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgOSwgMSkpICsKICBzY2FsZV9zaGFwZV9tYW51YWwoIkNoYXJpc21hdGljIHN0YXR1cyIsIHZhbHVlcyA9IGMoMTksIDgpKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpICsKICBsYWJzKHRpdGxlID0gIih6b29tZWQgaW4pIiwKICAgICAgIHN1YnRpdGxlID0gIkVycm9yIGJhcnMgYXJlIGJvb3RzdHJhcHBlZCA5NSUgQ0lzIiwKICAgICAgIHggPSAiU2l0ZSIsIHkgPSAiU2NvcmUgKHJhbmdlOiAwLTkpIikKCnBsb3RfZ3JpZChzcGV4XzJ0bzEwX3Bsb3RfYSwgc3BleF8ydG8xMF9wbG90X2IsIG5jb2wgPSAyKQpgYGAKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMgQnkgaXRlbQoKYGBge3IsIGZpZy53aWR0aCA9IDYsIGZpZy5hc3AgPSAxLCBpbmNsdWRlID0gVH0KZF9zcGV4X2Jhc2VfcTJ0bzEwICU+JQogIGZpbHRlcighaXMubmEoZXBpX2NoYXJjKSkgJT4lCiAgZ3JvdXBfYnkoZXBpX2N0cnksIGVwaV9jaGFyYywgcXVlc3Rpb24sIHF1ZXN0aW9uX3RleHQsIG9yZGVyKSAlPiUKICBtdWx0aV9ib290X3N0YW5kYXJkKCJyZXNwb25zZSIsIG5hLnJtID0gVCkgJT4lCiAgdW5ncm91cCgpICU+JSAKICBnZ3Bsb3QoYWVzKHggPSBlcGlfY3RyeSwgeSA9IG1lYW4sIGNvbG9yID0gZXBpX2N0cnksIHNoYXBlID0gZXBpX2NoYXJjKSkgKwogIGZhY2V0X3dyYXAofiBzdHJfd3JhcChxdWVzdGlvbl90ZXh0LCA1MCksIG5jb2wgPSAzKSArCiAgZmFjZXRfd3JhcCh+IHJlb3JkZXIoc3RyX3dyYXAocXVlc3Rpb25fdGV4dCwgNjApLCBvcmRlciksIG5jb2wgPSAzKSArCiAgZ2VvbV9wb2ludChkYXRhID0gZF9zcGV4X2Jhc2VfcTJ0bzEwICU+JSBmaWx0ZXIoIWlzLm5hKGVwaV9jaGFyYykpLCAKICAgICAgICAgICAgIGFlcyh5ID0gcmVzcG9uc2UpLCBhbHBoYSA9IDAuMDgsIHNob3cubGVnZW5kID0gRiwKICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25faml0dGVyZG9kZ2Uoaml0dGVyLndpZHRoID0gaml0dGVyX3dpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0dGVyLmhlaWdodCA9IDAuMDUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvZGdlLndpZHRoID0gZG9kZ2Vfd2lkKSkgKwogIGdlb21fcG9pbnRyYW5nZShhZXMoeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLCAKICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IGRvZGdlX3dpZCksIAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIHNob3cubGVnZW5kID0gVCkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIiwgZ3VpZGUgPSAibm9uZSIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDEsIDAuMjUpKSArCiAgc2NhbGVfc2hhcGVfbWFudWFsKCJDaGFyaXNtYXRpYyBzdGF0dXMiLCB2YWx1ZXMgPSBjKDE5LCA4KSkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSwKICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIikgKwogIGxhYnModGl0bGUgPSAiU3Bpcml0dWFsIGV4cGVyaWVuY2VzICMyLTEwOiBSZXNwb25zZXMgdG8gaW5kaXZpZHVhbCBpdGVtcyIsCiAgICAgICBzdWJ0aXRsZSA9ICJFcnJvciBiYXJzIGFyZSBib290c3RyYXBwZWQgOTUlIENJcyIsCiAgICAgICB4ID0gIlNpdGUiLCAKICAgICAgIHkgPSAiTWVhbiByZXNwb25zZSwgaS5lLiwgcHJvcG9ydGlvbiByZXNwb25kaW5nICd5ZXMnICgwID0gbm8sIDEgPSB5ZXMpIikKYGBgCgoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIFNwaXJpdHVhbCBleHBlcmllbmNlczogQmVpbmdzIHF1ZXN0aW9ucyAoUXVlc3Rpb25zICMxMS0xNSArIG1vcmUgZm9yIFRoYWlsYW5kKQoKIyMgT3ZlcmFsbCBzY29yZXMKCiMjIyBDb25zaWRlcmluZyBhbGwgImJlaW5ncyIgKG1vcmUgZm9yIFRoYWlsYW5kKQoKYGBge3J9CmRfc3BleF9iYXNlX3ExMXRvMTVfc2NvcmVkX3Byb3BhbGxfbWIgPC0gZF9zcGV4X2Jhc2VfcTExdG8xNV9zY29yZWQgJT4lCiAgZmlsdGVyKCFpcy5uYShlcGlfY2hhcmMpKSAlPiUKICBncm91cF9ieShlcGlfY3RyeSwgZXBpX2NoYXJjKSAlPiUKICBtdWx0aV9ib290X3N0YW5kYXJkKCJzY29yZV9wcm9wYWxsIiwgbmEucm0gPSBUKSAlPiUKICB1bmdyb3VwKCkKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNiwgaW5jbHVkZSA9IFR9CnNwZXhfMTF0bzE1X3Bsb3RfYSA8LSBnZ3Bsb3QoZF9zcGV4X2Jhc2VfcTExdG8xNV9zY29yZWQgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoIWlzLm5hKGVwaV9jaGFyYykpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFlcyh4ID0gZXBpX2N0cnksIHkgPSBzY29yZV9wcm9wYWxsLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgPSBlcGlfY3RyeSwgc2hhcGUgPSBlcGlfY2hhcmMpKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCoxLCBsdHkgPSAyLCBjb2xvciA9ICJibGFjayIpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLjUqMSwgbHR5ID0gMiwgY29sb3IgPSAiYmxhY2siKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMSoxLCBsdHkgPSAyLCBjb2xvciA9ICJibGFjayIpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC4yLCBzaG93LmxlZ2VuZCA9IEYsCiAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2ppdHRlcmRvZGdlKGppdHRlci53aWR0aCA9IGppdHRlcl93aWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppdHRlci5oZWlnaHQgPSAwLjAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2RnZS53aWR0aCA9IGRvZGdlX3dpZCkpICsKICBnZW9tX3BvaW50cmFuZ2UoZGF0YSA9IGRfc3BleF9iYXNlX3ExMXRvMTVfc2NvcmVkX3Byb3BhbGxfbWIsCiAgICAgICAgICAgICAgICAgIGFlcyh5ID0gbWVhbiwgeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLAogICAgICAgICAgICAgICAgICBmYXR0ZW4gPSAyLCBjb2xvciA9ICJibGFjayIsIHNob3cubGVnZW5kID0gVCwKICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IGRvZGdlX3dpZCkpICsKICBnZW9tX3RleHQoZGF0YSA9IGRhdGEuZnJhbWUoeCA9IDAuNSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IGMoMCoxLCAwLjUqMSwgMSoxKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiID0gYygifiBBbGwgYW5zd2VycyAnbm8nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICJ+IEFsbCBhbnN3ZXJzICdtYXliZSciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ+IEFsbCBhbnN3ZXJzICd5ZXMnIikpLAogICAgICAgICAgICBhZXMoeCA9IHgsIHkgPSB5LCBsYWJlbCA9IGxhYiwgc2hhcGUgPSBOVUxMKSwKICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBoanVzdCA9IDAsIG51ZGdlX3kgPSAwLjA1KSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiLCBndWlkZSA9ICJub25lIikgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMSwgMC4yKSkgKwogIHNjYWxlX3NoYXBlX21hbnVhbCgiQ2hhcmlzbWF0aWMgc3RhdHVzIiwgdmFsdWVzID0gYygxOSwgOCkpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIikgKwogIGxhYnModGl0bGUgPSAiU3Bpcml0dWFsIGV4cGVyaWVuY2VzIChRdWVzdGlvbnMgIzExLTE1KykiLAogICAgICAgc3VidGl0bGUgPSAiSW5jbHVkZXMgYWxsIGJlaW5ncyBmb3IgVGhhaWxhbmRcbkVycm9yIGJhcnMgYXJlIGJvb3RzdHJhcHBlZCA5NSUgQ0lzIiwKICAgICAgIHggPSAiU2l0ZSIsIHkgPSAiUHJvcG9ydGlvbiBzY29yZSAocmFuZ2U6IDAtMSkiKQoKc3BleF8xMXRvMTVfcGxvdF9iIDwtIGdncGxvdChkX3NwZXhfYmFzZV9xMTF0bzE1X3Njb3JlZF9wcm9wYWxsX21iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWVzKHggPSBlcGlfY3RyeSwgeSA9IG1lYW4sIGNvbG9yID0gZXBpX2N0cnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGUgPSBlcGlfY2hhcmMpKSArCiAgIyBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwKjEsIGx0eSA9IDIsIGNvbG9yID0gImJsYWNrIikgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAuNSoxLCBsdHkgPSAyLCBjb2xvciA9ICJibGFjayIpICsKICAjIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDEqMSwgbHR5ID0gMiwgY29sb3IgPSAiYmxhY2siKSArCiAgZ2VvbV9wb2ludHJhbmdlKGFlcyh5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksCiAgICAgICAgICAgICAgICAgIGZhdHRlbiA9IDQsIHNob3cubGVnZW5kID0gRiwKICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IGRvZGdlX3dpZCkpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIsIGd1aWRlID0gIm5vbmUiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCAxLCAwLjIpKSArCiAgc2NhbGVfc2hhcGVfbWFudWFsKCJDaGFyaXNtYXRpYyBzdGF0dXMiLCB2YWx1ZXMgPSBjKDE5LCA4KSkgKwogIGxhYnModGl0bGUgPSAiKHpvb21lZCBpbikiLAogICAgICAgc3VidGl0bGUgPSAiSW5jbHVkZXMgYWxsIGJlaW5ncyBmb3IgVGhhaWxhbmRcbkVycm9yIGJhcnMgYXJlIGJvb3RzdHJhcHBlZCA5NSUgQ0lzIiwKICAgICAgIHggPSAiU2l0ZSIsIHkgPSAiUHJvcG9ydGlvbiBzY29yZSAocmFuZ2U6IDAtMSkiKQoKcGxvdF9ncmlkKHBsb3RfZ3JpZChzcGV4XzExdG8xNV9wbG90X2EgKyB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLCAKICAgICAgICAgICAgICAgICAgICBzcGV4XzExdG8xNV9wbG90X2IsIG5jb2wgPSAyKSwKICAgICAgICAgIGdldF9sZWdlbmQoc3BleF8xMXRvMTVfcGxvdF9hKSwKICAgICAgICAgIG5jb2wgPSAxLCByZWxfaGVpZ2h0cyA9IGMoMSwgMC4xKSkKYGBgCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMjIyBDb25zaWRlcmluZyBmaXJzdCBmaXZlICJiZWluZ3MiIG9ubHkKCmBgYHtyfQpkX3NwZXhfYmFzZV9xMTF0bzE1X3Njb3JlZF9maXJzdDVfbWIgPC0gZF9zcGV4X2Jhc2VfcTExdG8xNV9zY29yZWQgJT4lCiAgZmlsdGVyKCFpcy5uYShlcGlfY2hhcmMpKSAlPiUKICBncm91cF9ieShlcGlfY3RyeSwgZXBpX2NoYXJjKSAlPiUKICBtdWx0aV9ib290X3N0YW5kYXJkKCJzY29yZV9maXJzdDUiLCBuYS5ybSA9IFQpICU+JQogIHVuZ3JvdXAoKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42LCBpbmNsdWRlID0gVH0Kc3BleF8xMXRvMTVfcGxvdF9jIDwtIGdncGxvdChkX3NwZXhfYmFzZV9xMTF0bzE1X3Njb3JlZCAlPiUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcighaXMubmEoZXBpX2NoYXJjKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZXMoeCA9IGVwaV9jdHJ5LCB5ID0gc2NvcmVfZmlyc3Q1LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvciA9IGVwaV9jdHJ5LCBzaGFwZSA9IGVwaV9jaGFyYykpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwKjUsIGx0eSA9IDIsIGNvbG9yID0gImJsYWNrIikgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAuNSo1LCBsdHkgPSAyLCBjb2xvciA9ICJibGFjayIpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAxKjUsIGx0eSA9IDIsIGNvbG9yID0gImJsYWNrIikgKwogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjIsIHNob3cubGVnZW5kID0gRiwKICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25faml0dGVyZG9kZ2Uoaml0dGVyLndpZHRoID0gaml0dGVyX3dpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0dGVyLmhlaWdodCA9IDAuMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9kZ2Uud2lkdGggPSBkb2RnZV93aWQpKSArCiAgZ2VvbV9wb2ludHJhbmdlKGRhdGEgPSBkX3NwZXhfYmFzZV9xMTF0bzE1X3Njb3JlZF9maXJzdDVfbWIsCiAgICAgICAgICAgICAgICAgIGFlcyh5ID0gbWVhbiwgeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLAogICAgICAgICAgICAgICAgICBmYXR0ZW4gPSAyLCBjb2xvciA9ICJibGFjayIsIHNob3cubGVnZW5kID0gVCwKICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IGRvZGdlX3dpZCkpICsKICBnZW9tX3RleHQoZGF0YSA9IGRhdGEuZnJhbWUoeCA9IDAuNSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IGMoMCo1LCAwLjUqNSwgMSo1KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiID0gYygifiBBbGwgYW5zd2VycyAnbm8nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICJ+IEFsbCBhbnN3ZXJzICdtYXliZSciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ+IEFsbCBhbnN3ZXJzICd5ZXMnIikpLAogICAgICAgICAgICBhZXMoeCA9IHgsIHkgPSB5LCBsYWJlbCA9IGxhYiwgc2hhcGUgPSBOVUxMKSwKICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBoanVzdCA9IDAsIG51ZGdlX3kgPSAwLjI1KSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiLCBndWlkZSA9ICJub25lIikgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgNSwgMSkpICsKICBzY2FsZV9zaGFwZV9tYW51YWwoIkNoYXJpc21hdGljIHN0YXR1cyIsIHZhbHVlcyA9IGMoMTksIDgpKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpICsKICBsYWJzKHRpdGxlID0gIlNwaXJpdHVhbCBleHBlcmllbmNlcyAoUXVlc3Rpb25zICMxMS0xNSspIiwKICAgICAgIHN1YnRpdGxlID0gIkluY2x1ZGVzIGZpcnN0IGZpdmUgYmVpbmdzIGZvciBhbGwgc2l0ZXNcbkVycm9yIGJhcnMgYXJlIGJvb3RzdHJhcHBlZCA5NSUgQ0lzIiwKICAgICAgIHggPSAiU2l0ZSIsIHkgPSAiU3VtIHNjb3JlIChyYW5nZTogMC01KSIpCgpzcGV4XzExdG8xNV9wbG90X2QgPC0gZ2dwbG90KGRfc3BleF9iYXNlX3ExMXRvMTVfc2NvcmVkX2ZpcnN0NV9tYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFlcyh4ID0gZXBpX2N0cnksIHkgPSBtZWFuLCBjb2xvciA9IGVwaV9jdHJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXBlID0gZXBpX2NoYXJjKSkgKwogICMgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCo1LCBsdHkgPSAyLCBjb2xvciA9ICJibGFjayIpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLjUqNSwgbHR5ID0gMiwgY29sb3IgPSAiYmxhY2siKSArCiAgIyBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAxKjUsIGx0eSA9IDIsIGNvbG9yID0gImJsYWNrIikgKwogIGdlb21fcG9pbnRyYW5nZShhZXMoeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLAogICAgICAgICAgICAgICAgICBmYXR0ZW4gPSA0LCBzaG93LmxlZ2VuZCA9IEYsCiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSBkb2RnZV93aWQpKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiLCBndWlkZSA9ICJub25lIikgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgNSwgMSkpICsKICBzY2FsZV9zaGFwZV9tYW51YWwoIkNoYXJpc21hdGljIHN0YXR1cyIsIHZhbHVlcyA9IGMoMTksIDgpKSArCiAgbGFicyh0aXRsZSA9ICIoem9vbWVkIGluKSIsCiAgICAgICBzdWJ0aXRsZSA9ICJJbmNsdWRlcyBmaXJzdCBmaXZlIGJlaW5ncyBmb3IgYWxsIHNpdGVzXG5FcnJvciBiYXJzIGFyZSBib290c3RyYXBwZWQgOTUlIENJcyIsCiAgICAgICB4ID0gIlNpdGUiLCB5ID0gIlN1bSBzY29yZSAocmFuZ2U6IDAtNSkiKQoKcGxvdF9ncmlkKHBsb3RfZ3JpZChzcGV4XzExdG8xNV9wbG90X2MgKyB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLCAKICAgICAgICAgICAgICAgICAgICBzcGV4XzExdG8xNV9wbG90X2QsIG5jb2wgPSAyKSwKICAgICAgICAgIGdldF9sZWdlbmQoc3BleF8xMXRvMTVfcGxvdF9jKSwKICAgICAgICAgIG5jb2wgPSAxLCByZWxfaGVpZ2h0cyA9IGMoMSwgMC4xKSkKYGBgCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMjIEJ5IGl0ZW0KCmBgYHtyfQpzcGV4XzExdG8xNV9wbG90X3VzIDwtIGRfc3BleF9iYXNlX3ExMXRvMTUgJT4lCiAgZmlsdGVyKGVwaV9jdHJ5ID09ICJVUyIsIGdyZXBsKCJ1c2EiLCBxdWVzdGlvbiksCiAgICAgICAgICFpcy5uYShlcGlfY2hhcmMpKSAlPiUKICBncm91cF9ieShlcGlfY3RyeSwgZXBpX2NoYXJjLCBxdWVzdGlvbiwgcXVlc3Rpb25fdGV4dCwgb3JkZXIpICU+JQogIG11bHRpX2Jvb3Rfc3RhbmRhcmQoInJlc3BvbnNlIiwgbmEucm0gPSBUKSAlPiUKICB1bmdyb3VwKCkgJT4lIAogIGdncGxvdChhZXMoeCA9IGVwaV9jdHJ5LCB5ID0gbWVhbiwgc2hhcGUgPSBlcGlfY2hhcmMpKSArCiAgZmFjZXRfd3JhcCh+IHJlb3JkZXIoc3RyX3dyYXAocXVlc3Rpb25fdGV4dCwgNDApLCBvcmRlciksIG5jb2wgPSA1KSArCiAgZ2VvbV9wb2ludChkYXRhID0gZF9zcGV4X2Jhc2VfcTExdG8xNSAlPiUgCiAgICAgICAgICAgICAgIGZpbHRlcihlcGlfY3RyeSA9PSAiVVMiLCBncmVwbCgidXNhIiwgcXVlc3Rpb24pLAogICAgICAgICAgICAgICAgICAgICAgIWlzLm5hKGVwaV9jaGFyYykpLCAKICAgICAgICAgICAgIGFlcyh5ID0gcmVzcG9uc2UpLCAKICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25faml0dGVyZG9kZ2Uoaml0dGVyLndpZHRoID0gaml0dGVyX3dpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0dGVyLmhlaWdodCA9IDAuMDUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvZGdlLndpZHRoID0gZG9kZ2Vfd2lkKSwKICAgICAgICAgICAgIGFscGhhID0gMC4wOCwgY29sb3IgPSAiIzFiOWU3NyIsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fcG9pbnRyYW5nZShhZXMoeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLCAKICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IGRvZGdlX3dpZCksIAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIiwgZ3VpZGUgPSAibm9uZSIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDEsIDAuMjUpKSArCiAgc2NhbGVfc2hhcGVfbWFudWFsKCJDaGFyaXNtYXRpYyBzdGF0dXMiLCB2YWx1ZXMgPSBjKDE5LCA4KSkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSArCiAgbGFicyh0aXRsZSA9ICJVUyBTcGlyaXR1YWwgZXhwZXJpZW5jZXMgIzExLTE1OiBSZXNwb25zZXMgdG8gaW5kaXZpZHVhbCBpdGVtcyIsCiAgICAgICBzdWJ0aXRsZSA9ICJFcnJvciBiYXJzIGFyZSBib290c3RyYXBwZWQgOTUlIENJcyIsCiAgICAgICB4ID0gIlNpdGUiLCAKICAgICAgIHkgPSAiTWVhbiByZXNwb25zZSAoMCA9IG5vLCAxID0geWVzKSIpCmBgYAoKYGBge3J9CnNwZXhfMTF0bzE1X3Bsb3RfZ2ggPC0gZF9zcGV4X2Jhc2VfcTExdG8xNSAlPiUKICBmaWx0ZXIoZXBpX2N0cnkgPT0gIkdoYW5hIiwgZ3JlcGwoImdoYSIsIHF1ZXN0aW9uKSwKICAgICAgICAgIWlzLm5hKGVwaV9jaGFyYykpICU+JQogIGdyb3VwX2J5KGVwaV9jdHJ5LCBlcGlfY2hhcmMsIHF1ZXN0aW9uLCBxdWVzdGlvbl90ZXh0LCBvcmRlcikgJT4lCiAgbXVsdGlfYm9vdF9zdGFuZGFyZCgicmVzcG9uc2UiLCBuYS5ybSA9IFQpICU+JQogIHVuZ3JvdXAoKSAlPiUgCiAgZ2dwbG90KGFlcyh4ID0gZXBpX2N0cnksIHkgPSBtZWFuLCBzaGFwZSA9IGVwaV9jaGFyYykpICsKICBmYWNldF93cmFwKH4gcmVvcmRlcihzdHJfd3JhcChxdWVzdGlvbl90ZXh0LCA0MCksIG9yZGVyKSwgbmNvbCA9IDUpICsKICBnZW9tX3BvaW50KGRhdGEgPSBkX3NwZXhfYmFzZV9xMTF0bzE1ICU+JSAKICAgICAgICAgICAgICAgZmlsdGVyKGVwaV9jdHJ5ID09ICJHaGFuYSIsIGdyZXBsKCJnaGEiLCBxdWVzdGlvbiksCiAgICAgICAgICAgICAgICAgICAgICAhaXMubmEoZXBpX2NoYXJjKSksIAogICAgICAgICAgICAgYWVzKHkgPSByZXNwb25zZSksIAogICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9qaXR0ZXJkb2RnZShqaXR0ZXIud2lkdGggPSBqaXR0ZXJfd2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXR0ZXIuaGVpZ2h0ID0gMC4wNSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9kZ2Uud2lkdGggPSBkb2RnZV93aWQpLAogICAgICAgICAgICAgYWxwaGEgPSAwLjA4LCBjb2xvciA9ICIjMWI5ZTc3Iiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9wb2ludHJhbmdlKGFlcyh5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksIAogICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gZG9kZ2Vfd2lkKSwgCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiLCBndWlkZSA9ICJub25lIikgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMSwgMC4yNSkpICsKICBzY2FsZV9zaGFwZV9tYW51YWwoIkNoYXJpc21hdGljIHN0YXR1cyIsIHZhbHVlcyA9IGMoMTksIDgpKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpICsKICBsYWJzKHRpdGxlID0gIkdIQU5BIFNwaXJpdHVhbCBleHBlcmllbmNlcyAjMTEtMTU6IFJlc3BvbnNlcyB0byBpbmRpdmlkdWFsIGl0ZW1zIiwKICAgICAgIHN1YnRpdGxlID0gIkVycm9yIGJhcnMgYXJlIGJvb3RzdHJhcHBlZCA5NSUgQ0lzIiwKICAgICAgIHggPSAiU2l0ZSIsIAogICAgICAgeSA9ICJNZWFuIHJlc3BvbnNlICgwID0gbm8sIDEgPSB5ZXMpIikKYGBgCgpgYGB7cn0Kc3BleF8xMXRvMTVfcGxvdF90aCA8LSBkX3NwZXhfYmFzZV9xMTF0bzE1ICU+JQogIGZpbHRlcihlcGlfY3RyeSA9PSAiVGhhaWxhbmQiLCBncmVwbCgidGhsIiwgcXVlc3Rpb24pLAogICAgICAgICAhaXMubmEoZXBpX2NoYXJjKSkgJT4lCiAgZ3JvdXBfYnkoZXBpX2N0cnksIGVwaV9jaGFyYywgcXVlc3Rpb24sIHF1ZXN0aW9uX3RleHQsIG9yZGVyKSAlPiUKICBtdWx0aV9ib290X3N0YW5kYXJkKCJyZXNwb25zZSIsIG5hLnJtID0gVCkgJT4lCiAgdW5ncm91cCgpICU+JSAKICBnZ3Bsb3QoYWVzKHggPSBlcGlfY3RyeSwgeSA9IG1lYW4sIHNoYXBlID0gZXBpX2NoYXJjKSkgKwogIGZhY2V0X3dyYXAofiByZW9yZGVyKHN0cl93cmFwKHF1ZXN0aW9uX3RleHQsIDQwKSwgb3JkZXIpLCBuY29sID0gNSkgKwogIGdlb21fcG9pbnQoZGF0YSA9IGRfc3BleF9iYXNlX3ExMXRvMTUgJT4lIAogICAgICAgICAgICAgICBmaWx0ZXIoZXBpX2N0cnkgPT0gIlRoYWlsYW5kIiwgZ3JlcGwoInRobCIsIHF1ZXN0aW9uKSwKICAgICAgICAgICAgICAgICAgICAgICFpcy5uYShlcGlfY2hhcmMpKSwgCiAgICAgICAgICAgICBhZXMoeSA9IHJlc3BvbnNlKSwgCiAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2ppdHRlcmRvZGdlKGppdHRlci53aWR0aCA9IGppdHRlcl93aWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppdHRlci5oZWlnaHQgPSAwLjA1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2RnZS53aWR0aCA9IGRvZGdlX3dpZCksCiAgICAgICAgICAgICBhbHBoYSA9IDAuMDgsIGNvbG9yID0gIiMxYjllNzciLCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3BvaW50cmFuZ2UoYWVzKHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSwgCiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSBkb2RnZV93aWQpLCAKICAgICAgICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIsIGd1aWRlID0gIm5vbmUiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCAxLCAwLjI1KSkgKwogIHNjYWxlX3NoYXBlX21hbnVhbCgiQ2hhcmlzbWF0aWMgc3RhdHVzIiwgdmFsdWVzID0gYygxOSwgOCkpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIikgKwogIGxhYnModGl0bGUgPSAiVEhBSUxBTkQgU3Bpcml0dWFsIGV4cGVyaWVuY2VzICMxMS0xNTogUmVzcG9uc2VzIHRvIGluZGl2aWR1YWwgaXRlbXMiLAogICAgICAgc3VidGl0bGUgPSAiRXJyb3IgYmFycyBhcmUgYm9vdHN0cmFwcGVkIDk1JSBDSXMiLAogICAgICAgeCA9ICJTaXRlIiwgCiAgICAgICB5ID0gIk1lYW4gcmVzcG9uc2UgKDAgPSBubywgMSA9IHllcykiKQpgYGAKCmBgYHtyfQpzcGV4XzExdG8xNV9wbG90X2NoIDwtIGRfc3BleF9iYXNlX3ExMXRvMTUgJT4lCiAgZmlsdGVyKGVwaV9jdHJ5ID09ICJDaGluYSIsIGdyZXBsKCJjaG4iLCBxdWVzdGlvbiksCiAgICAgICAgICFpcy5uYShlcGlfY2hhcmMpKSAlPiUKICBncm91cF9ieShlcGlfY3RyeSwgZXBpX2NoYXJjLCBxdWVzdGlvbiwgcXVlc3Rpb25fdGV4dCwgb3JkZXIpICU+JQogIG11bHRpX2Jvb3Rfc3RhbmRhcmQoInJlc3BvbnNlIiwgbmEucm0gPSBUKSAlPiUKICB1bmdyb3VwKCkgJT4lIAogIGdncGxvdChhZXMoeCA9IGVwaV9jdHJ5LCB5ID0gbWVhbiwgc2hhcGUgPSBlcGlfY2hhcmMpKSArCiAgZmFjZXRfd3JhcCh+IHJlb3JkZXIoc3RyX3dyYXAocXVlc3Rpb25fdGV4dCwgNDApLCBvcmRlciksIG5jb2wgPSA1KSArCiAgZ2VvbV9wb2ludChkYXRhID0gZF9zcGV4X2Jhc2VfcTExdG8xNSAlPiUgCiAgICAgICAgICAgICAgIGZpbHRlcihlcGlfY3RyeSA9PSAiQ2hpbmEiLCBncmVwbCgiY2huIiwgcXVlc3Rpb24pLAogICAgICAgICAgICAgICAgICAgICAgIWlzLm5hKGVwaV9jaGFyYykpLCAKICAgICAgICAgICAgIGFlcyh5ID0gcmVzcG9uc2UpLCAKICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25faml0dGVyZG9kZ2Uoaml0dGVyLndpZHRoID0gaml0dGVyX3dpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0dGVyLmhlaWdodCA9IDAuMDUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvZGdlLndpZHRoID0gZG9kZ2Vfd2lkKSwKICAgICAgICAgICAgIGFscGhhID0gMC4wOCwgY29sb3IgPSAiIzFiOWU3NyIsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fcG9pbnRyYW5nZShhZXMoeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLCAKICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IGRvZGdlX3dpZCksIAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIiwgZ3VpZGUgPSAibm9uZSIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDEsIDAuMjUpKSArCiAgc2NhbGVfc2hhcGVfbWFudWFsKCJDaGFyaXNtYXRpYyBzdGF0dXMiLCB2YWx1ZXMgPSBjKDE5LCA4KSkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSArCiAgbGFicyh0aXRsZSA9ICJDSElOQSBTcGlyaXR1YWwgZXhwZXJpZW5jZXMgIzExLTE1OiBSZXNwb25zZXMgdG8gaW5kaXZpZHVhbCBpdGVtcyIsCiAgICAgICBzdWJ0aXRsZSA9ICJFcnJvciBiYXJzIGFyZSBib290c3RyYXBwZWQgOTUlIENJcyIsCiAgICAgICB4ID0gIlNpdGUiLCAKICAgICAgIHkgPSAiTWVhbiByZXNwb25zZSAoMCA9IG5vLCAxID0geWVzKSIpCmBgYAoKYGBge3J9CnNwZXhfMTF0bzE1X3Bsb3RfdnQgPC0gZF9zcGV4X2Jhc2VfcTExdG8xNSAlPiUKICBmaWx0ZXIoZXBpX2N0cnkgPT0gIlZhbnVhdHUiLCBncmVwbCgidnV0IiwgcXVlc3Rpb24pLAogICAgICAgICAhaXMubmEoZXBpX2NoYXJjKSkgJT4lCiAgZ3JvdXBfYnkoZXBpX2N0cnksIGVwaV9jaGFyYywgcXVlc3Rpb24sIHF1ZXN0aW9uX3RleHQsIG9yZGVyKSAlPiUKICBtdWx0aV9ib290X3N0YW5kYXJkKCJyZXNwb25zZSIsIG5hLnJtID0gVCkgJT4lCiAgdW5ncm91cCgpICU+JSAKICBnZ3Bsb3QoYWVzKHggPSBlcGlfY3RyeSwgeSA9IG1lYW4sIHNoYXBlID0gZXBpX2NoYXJjKSkgKwogIGZhY2V0X3dyYXAofiByZW9yZGVyKHN0cl93cmFwKHF1ZXN0aW9uX3RleHQsIDQwKSwgb3JkZXIpLCBuY29sID0gNSkgKwogIGdlb21fcG9pbnQoZGF0YSA9IGRfc3BleF9iYXNlX3ExMXRvMTUgJT4lIAogICAgICAgICAgICAgICBmaWx0ZXIoZXBpX2N0cnkgPT0gIlZhbnVhdHUiLCBncmVwbCgidnV0IiwgcXVlc3Rpb24pLAogICAgICAgICAgICAgICAgICAgICAgIWlzLm5hKGVwaV9jaGFyYykpLCAKICAgICAgICAgICAgIGFlcyh5ID0gcmVzcG9uc2UpLCAKICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25faml0dGVyZG9kZ2Uoaml0dGVyLndpZHRoID0gaml0dGVyX3dpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0dGVyLmhlaWdodCA9IDAuMDUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvZGdlLndpZHRoID0gZG9kZ2Vfd2lkKSwKICAgICAgICAgICAgIGFscGhhID0gMC4wOCwgY29sb3IgPSAiIzFiOWU3NyIsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fcG9pbnRyYW5nZShhZXMoeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLCAKICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IGRvZGdlX3dpZCksIAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIiwgZ3VpZGUgPSAibm9uZSIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDEsIDAuMjUpKSArCiAgc2NhbGVfc2hhcGVfbWFudWFsKCJDaGFyaXNtYXRpYyBzdGF0dXMiLCB2YWx1ZXMgPSBjKDE5LCA4KSkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSArCiAgbGFicyh0aXRsZSA9ICJWQU5VQVRVIFNwaXJpdHVhbCBleHBlcmllbmNlcyAjMTEtMTU6IFJlc3BvbnNlcyB0byBpbmRpdmlkdWFsIGl0ZW1zIiwKICAgICAgIHN1YnRpdGxlID0gIkVycm9yIGJhcnMgYXJlIGJvb3RzdHJhcHBlZCA5NSUgQ0lzIiwKICAgICAgIHggPSAiU2l0ZSIsIAogICAgICAgeSA9ICJNZWFuIHJlc3BvbnNlICgwID0gbm8sIDEgPSB5ZXMpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDEuNywgaW5jbHVkZSA9IEZ9CiMgcGxvdF9ncmlkKHNwZXhfMTF0bzE1X3Bsb3RfdXMsIHNwZXhfMTF0bzE1X3Bsb3RfZ2gsIHNwZXhfMTF0bzE1X3Bsb3RfdGgsCiMgICAgICAgICAgIHNwZXhfMTF0bzE1X3Bsb3RfY2gsIHNwZXhfMTF0bzE1X3Bsb3RfdnQsIG5jb2wgPSAxLAojICAgICAgICAgICByZWxfaGVpZ2h0cyA9IGMoMSwgMSwgMiwgMSwgMSkpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAyLCBpbmNsdWRlID0gVCwgZWNobyA9IEZ9CmRfc3BleF9iYXNlX3ExMXRvMTUgJT4lCiAgZmlsdGVyKCFpcy5uYShlcGlfY2hhcmMpKSAlPiUKICBncm91cF9ieShlcGlfY3RyeSwgZXBpX2NoYXJjLCBxdWVzdGlvbiwgcXVlc3Rpb25fdGV4dCwgb3JkZXIpICU+JQogIG11bHRpX2Jvb3Rfc3RhbmRhcmQoInJlc3BvbnNlIiwgbmEucm0gPSBUKSAlPiUKICB1bmdyb3VwKCkgJT4lIAogIGZpbHRlcighaXMubmEobWVhbiksIG1lYW4gIT0gIk5hTiIpICU+JQogIG11dGF0ZShlcGlfY2hhcmMgPSBmYWN0b3IoZXBpX2NoYXJjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiY2hhcmlzbWF0aWMiLCAibm90IGNoYXJpc21hdGljIikpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSByZW9yZGVyKHN0cl93cmFwKHF1ZXN0aW9uX3RleHQsIDYwKSwgZGVzYyhvcmRlcikpLCAKICAgICAgICAgICAgIHkgPSBtZWFuLCBjb2xvciA9IGVwaV9jdHJ5LCBzaGFwZSA9IGVwaV9jaGFyYykpICsKICBmYWNldF9ncmlkKGVwaV9jdHJ5IH4gLiwgc2NhbGVzID0gImZyZWUiLCBzcGFjZSA9ICJmcmVlIikgKwogIGdlb21faml0dGVyKGRhdGEgPSBkX3NwZXhfYmFzZV9xMTF0bzE1ICU+JSAKICAgICAgICAgICAgICAgIGZpbHRlcighaXMubmEocmVzcG9uc2UpLCAhaXMubmEoZXBpX2NoYXJjKSksCiAgICAgICAgICAgICAgYWVzKHkgPSByZXNwb25zZSksYWxwaGEgPSAwLjA4LCBzaG93LmxlZ2VuZCA9IEYsCiAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9qaXR0ZXJkb2RnZShqaXR0ZXIud2lkdGggPSBqaXR0ZXJfd2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0dGVyLmhlaWdodCA9IDAuMDUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2RnZS53aWR0aCA9IGRvZGdlX3dpZCkpICsKICBnZW9tX3BvaW50cmFuZ2UoYWVzKHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSwKICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IGRvZGdlX3dpZCksCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgc2hvdy5sZWdlbmQgPSBUKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiLCBndWlkZSA9ICJub25lIikgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMSwgMC4yNSkpICsKICBzY2FsZV9zaGFwZV9tYW51YWwoIkNoYXJpc21hdGljIHN0YXR1cyIsIHZhbHVlcyA9IGMoMTksIDgpKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpICsKICBsYWJzKHRpdGxlID0gIlNwaXJpdHVhbCBleHBlcmllbmNlcyAjMTEtMTU6XG5SZXNwb25zZXMgdG8gaW5kaXZpZHVhbCBpdGVtcyIsCiAgICAgICBzdWJ0aXRsZSA9ICJFcnJvciBiYXJzIGFyZSBib290c3RyYXBwZWQgOTUlIENJcyIsCiAgICAgICB4ID0gIlF1ZXN0aW9uIiwgCiAgICAgICB5ID0gIk1lYW4gcmVzcG9uc2UsIGkuZS4sIHByb3BvcnRpb24gcmVzcG9uZGluZyAneWVzJyAoMCA9IG5vLCAxID0geWVzKSIpICsKICBjb29yZF9mbGlwKCkKYGBgCgoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIFNwaXJpdHVhbCBleHBlcmllbmNlczogVW5pdmVyc2FsIHF1ZXN0aW9ucywgc2V0IDIgKFF1ZXN0aW9ucyAjMTYtMjEpCgojIyBPdmVyYWxsIHNjb3JlcwoKYGBge3J9CmRfc3BleF9iYXNlX3ExNnRvMjFfc2NvcmVkX21iIDwtIGRfc3BleF9iYXNlX3ExNnRvMjFfc2NvcmVkICU+JQogIGZpbHRlcighaXMubmEoZXBpX2NoYXJjKSkgJT4lCiAgZ3JvdXBfYnkoZXBpX2N0cnksIGVwaV9jaGFyYykgJT4lCiAgbXVsdGlfYm9vdF9zdGFuZGFyZCgic2NvcmUiKSAlPiUKICB1bmdyb3VwKCkKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNiwgaW5jbHVkZSA9IFR9CnNwZXhfcTE2dG8yMV9wbG90X2EgPC0gZ2dwbG90KGRfc3BleF9iYXNlX3ExNnRvMjFfc2NvcmVkICU+JQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcighaXMubmEoZXBpX2NoYXJjKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZXMoeCA9IGVwaV9jdHJ5LCB5ID0gc2NvcmUsIGNvbG9yID0gZXBpX2N0cnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGUgPSBlcGlfY2hhcmMpKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCo2LCBsdHkgPSAyLCBjb2xvciA9ICJibGFjayIpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLjUqNiwgbHR5ID0gMiwgY29sb3IgPSAiYmxhY2siKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMSo2LCBsdHkgPSAyLCBjb2xvciA9ICJibGFjayIpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC4yLCBzaG93LmxlZ2VuZCA9IEYsCiAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2ppdHRlcmRvZGdlKGppdHRlci53aWR0aCA9IGppdHRlcl93aWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppdHRlci5oZWlnaHQgPSAwLjIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvZGdlLndpZHRoID0gZG9kZ2Vfd2lkKSkgKwogIGdlb21fcG9pbnRyYW5nZShkYXRhID0gZF9zcGV4X2Jhc2VfcTE2dG8yMV9zY29yZWRfbWIsCiAgICAgICAgICAgICAgICAgIGFlcyh5ID0gbWVhbiwgeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLAogICAgICAgICAgICAgICAgICBmYXR0ZW4gPSAyLCBjb2xvciA9ICJibGFjayIsIHNob3cubGVnZW5kID0gVCwKICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IGRvZGdlX3dpZCkpICsKICBnZW9tX3RleHQoZGF0YSA9IGRhdGEuZnJhbWUoeCA9IDAuNSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IGMoMCo2LCAwLjUqNiwgMSo2KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiID0gYygifiBBbGwgYW5zd2VycyAnbm8nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICJ+IEFsbCBhbnN3ZXJzICdtYXliZSciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ+IEFsbCBhbnN3ZXJzICd5ZXMnIikpLAogICAgICAgICAgICBhZXMoeCA9IHgsIHkgPSB5LCBsYWJlbCA9IGxhYiwgc2hhcGUgPSBOVUxMKSwKICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBoanVzdCA9IDAsIG51ZGdlX3kgPSAwLjI1KSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiLCBndWlkZSA9ICJub25lIikgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgNiwgMSkpICsKICBzY2FsZV9zaGFwZV9tYW51YWwoIkNoYXJpc21hdGljIHN0YXR1cyIsIHZhbHVlcyA9IGMoMTksIDgpKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpICsKICBsYWJzKHRpdGxlID0gIlNwaXJpdHVhbCBleHBlcmllbmNlcyAoUXVlc3Rpb25zICMxNi0yMSkiLAogICAgICAgc3VidGl0bGUgPSAiRXJyb3IgYmFycyBhcmUgYm9vdHN0cmFwcGVkIDk1JSBDSXMiLAogICAgICAgeCA9ICJTaXRlIiwgeSA9ICJTY29yZSAocmFuZ2U6IDAtNikiKQoKc3BleF9xMTZ0bzIxX3Bsb3RfYiA8LSBnZ3Bsb3QoZF9zcGV4X2Jhc2VfcTE2dG8yMV9zY29yZWRfbWIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZXMoeCA9IGVwaV9jdHJ5LCB5ID0gbWVhbiwgY29sb3IgPSBlcGlfY3RyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFwZSA9IGVwaV9jaGFyYykpICsKICAjIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAqNiwgbHR5ID0gMiwgY29sb3IgPSAiYmxhY2siKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMC41KjYsIGx0eSA9IDIsIGNvbG9yID0gImJsYWNrIikgKwogICMgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMSo2LCBsdHkgPSAyLCBjb2xvciA9ICJibGFjayIpICsKICBnZW9tX3BvaW50cmFuZ2UoYWVzKHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSwKICAgICAgICAgICAgICAgICAgZmF0dGVuID0gNCwgc2hvdy5sZWdlbmQgPSBGLAogICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gZG9kZ2Vfd2lkKSkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIiwgZ3VpZGUgPSAibm9uZSIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDYsIDEpKSArCiAgc2NhbGVfc2hhcGVfbWFudWFsKCJDaGFyaXNtYXRpYyBzdGF0dXMiLCB2YWx1ZXMgPSBjKDE5LCA4KSkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSArCiAgbGFicyh0aXRsZSA9ICIoem9vbWVkIGluKSIsCiAgICAgICBzdWJ0aXRsZSA9ICJFcnJvciBiYXJzIGFyZSBib290c3RyYXBwZWQgOTUlIENJcyIsCiAgICAgICB4ID0gIlNpdGUiLCB5ID0gIlNjb3JlIChyYW5nZTogMC02KSIpCgpwbG90X2dyaWQocGxvdF9ncmlkKHNwZXhfcTE2dG8yMV9wbG90X2EgKyB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLCAKICAgICAgICAgICAgICAgICAgICBzcGV4X3ExNnRvMjFfcGxvdF9iLCBuY29sID0gMiksCiAgICAgICAgICBnZXRfbGVnZW5kKHNwZXhfcTE2dG8yMV9wbG90X2EpLAogICAgICAgICAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygxLCAwLjEpKQpgYGAKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMgQnkgaXRlbQoKYGBge3IsIGZpZy53aWR0aCA9IDYsIGZpZy5hc3AgPSAwLjcsIGluY2x1ZGUgPSBUfQpkX3NwZXhfYmFzZV9xMTZ0bzIxICU+JQogIGZpbHRlcighaXMubmEoZXBpX2NoYXJjKSkgJT4lCiAgZ3JvdXBfYnkoZXBpX2N0cnksIGVwaV9jaGFyYywgcXVlc3Rpb24sIHF1ZXN0aW9uX3RleHQsIG9yZGVyKSAlPiUKICBtdWx0aV9ib290X3N0YW5kYXJkKCJyZXNwb25zZSIsIG5hLnJtID0gVCkgJT4lCiAgdW5ncm91cCgpICU+JSAKICBnZ3Bsb3QoYWVzKHggPSBlcGlfY3RyeSwgeSA9IG1lYW4sIGNvbG9yID0gZXBpX2N0cnksIHNoYXBlID0gZXBpX2NoYXJjKSkgKwogIGZhY2V0X3dyYXAofiByZW9yZGVyKHN0cl93cmFwKHF1ZXN0aW9uX3RleHQsIDYxKSwgb3JkZXIpLCBuY29sID0gMykgKwogIGdlb21fcG9pbnQoZGF0YSA9IGRfc3BleF9iYXNlX3ExNnRvMjEsIGFlcyh5ID0gcmVzcG9uc2UpLCAKICAgICAgICAgICAgIGFscGhhID0gMC4wOCwgc2hvdy5sZWdlbmQgPSBGLAogICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9qaXR0ZXJkb2RnZShqaXR0ZXIud2lkdGggPSBqaXR0ZXJfd2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXR0ZXIuaGVpZ2h0ID0gMC4wNSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9kZ2Uud2lkdGggPSBkb2RnZV93aWQpKSArCiAgZ2VvbV9wb2ludHJhbmdlKGFlcyh5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksIAogICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gZG9kZ2Vfd2lkKSwgCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgc2hvdy5sZWdlbmQgPSBUKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiLCBndWlkZSA9ICJub25lIikgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMSwgMC4yNSkpICsKICBzY2FsZV9zaGFwZV9tYW51YWwoIkNoYXJpc21hdGljIHN0YXR1cyIsIHZhbHVlcyA9IGMoMTksIDgpKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCB2anVzdCA9IDEpLAogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSArCiAgbGFicyh0aXRsZSA9ICJTcGlyaXR1YWwgZXhwZXJpZW5jZXMgIzE2LTIxOiBSZXNwb25zZXMgdG8gaW5kaXZpZHVhbCBpdGVtcyIsCiAgICAgICBzdWJ0aXRsZSA9ICJFcnJvciBiYXJzIGFyZSBib290c3RyYXBwZWQgOTUlIENJcyIsCiAgICAgICB4ID0gIlNpdGUiLCAKICAgICAgIHkgPSAiTWVhbiByZXNwb25zZSwgaS5lLiwgcHJvcG9ydGlvbiByZXNwb25kaW5nICd5ZXMnICgwID0gbm8sIDEgPSB5ZXMpIikKYGBgCgoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIFNwaXJpdHVhbCBleHBlcmllbmNlczogVW5pdmVyc2FsIHF1ZXN0aW9ucywgc2V0IDMgKFF1ZXN0aW9ucyAjMjItMjMpCgojIyBPdmVyYWxsIHNjb3JlcwoKYGBge3J9CmRfc3BleF9iYXNlX3EyMnRvMjNfc2NvcmVkX21iIDwtIGRfc3BleF9iYXNlX3EyMnRvMjNfc2NvcmVkICU+JQogIGZpbHRlcighaXMubmEoZXBpX2NoYXJjKSkgJT4lCiAgZ3JvdXBfYnkoZXBpX2N0cnksIGVwaV9jaGFyYykgJT4lCiAgbXVsdGlfYm9vdF9zdGFuZGFyZCgic2NvcmUiKSAlPiUKICB1bmdyb3VwKCkKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNiwgaW5jbHVkZSA9IFR9CnNwZXhfcTIydG8yM19wbG90X2EgPC0gZ2dwbG90KGRfc3BleF9iYXNlX3EyMnRvMjNfc2NvcmVkICU+JQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcighaXMubmEoZXBpX2NoYXJjKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZXMoeCA9IGVwaV9jdHJ5LCB5ID0gc2NvcmUsIGNvbG9yID0gZXBpX2N0cnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGUgPSBlcGlfY2hhcmMpKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCoyLCBsdHkgPSAyLCBjb2xvciA9ICJibGFjayIpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLjUqMiwgbHR5ID0gMiwgY29sb3IgPSAiYmxhY2siKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMSoyLCBsdHkgPSAyLCBjb2xvciA9ICJibGFjayIpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC4yLCBzaG93LmxlZ2VuZCA9IEYsCiAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2ppdHRlcmRvZGdlKGppdHRlci53aWR0aCA9IGppdHRlcl93aWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppdHRlci5oZWlnaHQgPSAwLjIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvZGdlLndpZHRoID0gZG9kZ2Vfd2lkKSkgKwogIGdlb21fcG9pbnRyYW5nZShkYXRhID0gZF9zcGV4X2Jhc2VfcTIydG8yM19zY29yZWRfbWIsCiAgICAgICAgICAgICAgICAgIGFlcyh5ID0gbWVhbiwgeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLAogICAgICAgICAgICAgICAgICBmYXR0ZW4gPSAyLCBjb2xvciA9ICJibGFjayIsIHNob3cubGVnZW5kID0gVCwKICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IGRvZGdlX3dpZCkpICsKICBnZW9tX3RleHQoZGF0YSA9IGRhdGEuZnJhbWUoeCA9IDAuNSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IGMoMCoyLCAwLjUqMiwgMSoyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiID0gYygifiBBbGwgYW5zd2VycyAnbm8nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICJ+IEFsbCBhbnN3ZXJzICdtYXliZSciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ+IEFsbCBhbnN3ZXJzICd5ZXMnIikpLAogICAgICAgICAgICBhZXMoeCA9IHgsIHkgPSB5LCBsYWJlbCA9IGxhYiwgc2hhcGUgPSBOVUxMKSwKICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBoanVzdCA9IDAsIG51ZGdlX3kgPSAwLjEpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIsIGd1aWRlID0gIm5vbmUiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCAyLCAxKSkgKwogIHNjYWxlX3NoYXBlX21hbnVhbCgiQ2hhcmlzbWF0aWMgc3RhdHVzIiwgdmFsdWVzID0gYygxOSwgOCkpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIikgKwogIGxhYnModGl0bGUgPSAiU3Bpcml0dWFsIGV4cGVyaWVuY2VzIChRdWVzdGlvbnMgIzIyLTIzKSIsCiAgICAgICBzdWJ0aXRsZSA9ICJFcnJvciBiYXJzIGFyZSBib290c3RyYXBwZWQgOTUlIENJcyIsCiAgICAgICB4ID0gIlNpdGUiLCB5ID0gIlNjb3JlIChyYW5nZTogMC0yKSIpCgpzcGV4X3EyMnRvMjNfcGxvdF9iIDwtIGdncGxvdChkX3NwZXhfYmFzZV9xMjJ0bzIzX3Njb3JlZF9tYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFlcyh4ID0gZXBpX2N0cnksIHkgPSBtZWFuLCBjb2xvciA9IGVwaV9jdHJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXBlID0gZXBpX2NoYXJjKSkgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAqMiwgbHR5ID0gMiwgY29sb3IgPSAiYmxhY2siKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMC41KjIsIGx0eSA9IDIsIGNvbG9yID0gImJsYWNrIikgKwogICMgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMSoyLCBsdHkgPSAyLCBjb2xvciA9ICJibGFjayIpICsKICBnZW9tX3BvaW50cmFuZ2UoYWVzKHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSwKICAgICAgICAgICAgICAgICAgZmF0dGVuID0gNCwgc2hvdy5sZWdlbmQgPSBGLAogICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gZG9kZ2Vfd2lkKSkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIiwgZ3VpZGUgPSAibm9uZSIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDIsIDEpKSArCiAgc2NhbGVfc2hhcGVfbWFudWFsKCJDaGFyaXNtYXRpYyBzdGF0dXMiLCB2YWx1ZXMgPSBjKDE5LCA4KSkgKwogIGxhYnModGl0bGUgPSAiKHpvb21lZCBpbikiLAogICAgICAgc3VidGl0bGUgPSAiRXJyb3IgYmFycyBhcmUgYm9vdHN0cmFwcGVkIDk1JSBDSXMiLAogICAgICAgeCA9ICJTaXRlIiwgeSA9ICJTY29yZSAocmFuZ2U6IDAtMikiKQoKcGxvdF9ncmlkKHBsb3RfZ3JpZChzcGV4X3EyMnRvMjNfcGxvdF9hICsgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwKICAgICAgICAgICAgICAgICAgICBzcGV4X3EyMnRvMjNfcGxvdF9iLCBuY29sID0gMiksCiAgICAgICAgICBnZXRfbGVnZW5kKHNwZXhfcTIydG8yM19wbG90X2EpLAogICAgICAgICAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygxLCAwLjEpKQpgYGAKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMgQnkgaXRlbQoKYGBge3IsIGZpZy53aWR0aCA9IDYsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpkX3NwZXhfYmFzZV9xMjJ0bzIzICU+JQogIGZpbHRlcighaXMubmEoZXBpX2NoYXJjKSkgJT4lCiAgZ3JvdXBfYnkoZXBpX2N0cnksIGVwaV9jaGFyYywgcXVlc3Rpb24sIHF1ZXN0aW9uX3RleHQsIG9yZGVyKSAlPiUKICBtdWx0aV9ib290X3N0YW5kYXJkKCJyZXNwb25zZSIsIG5hLnJtID0gVCkgJT4lCiAgdW5ncm91cCgpICU+JSAKICBnZ3Bsb3QoYWVzKHggPSBlcGlfY3RyeSwgeSA9IG1lYW4sIGNvbG9yID0gZXBpX2N0cnksIHNoYXBlID0gZXBpX2NoYXJjKSkgKwogIGZhY2V0X3dyYXAofiByZW9yZGVyKHN0cl93cmFwKHF1ZXN0aW9uX3RleHQsIDkwKSwgb3JkZXIpLCBuY29sID0gMykgKwogIGdlb21fcG9pbnQoZGF0YSA9IGRfc3BleF9iYXNlX3EyMnRvMjMgJT4lCiAgICAgICAgICAgICAgIGZpbHRlcighaXMubmEoZXBpX2NoYXJjKSksIGFlcyh5ID0gcmVzcG9uc2UpLCAKICAgICAgICAgICAgIGFscGhhID0gMC4wOCwgc2hvdy5sZWdlbmQgPSBGLAogICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9qaXR0ZXJkb2RnZShqaXR0ZXIud2lkdGggPSBqaXR0ZXJfd2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXR0ZXIuaGVpZ2h0ID0gMC4wNSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9kZ2Uud2lkdGggPSBkb2RnZV93aWQpKSArCiAgZ2VvbV9wb2ludHJhbmdlKGFlcyh5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksIAogICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gZG9kZ2Vfd2lkKSwgCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgc2hvdy5sZWdlbmQgPSBUKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiLCBndWlkZSA9ICJub25lIikgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMSwgMC4yNSkpICsKICBzY2FsZV9zaGFwZV9tYW51YWwoIkNoYXJpc21hdGljIHN0YXR1cyIsIHZhbHVlcyA9IGMoMTksIDgpKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCB2anVzdCA9IDEpLAogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSArCiAgbGFicyh0aXRsZSA9ICJTcGlyaXR1YWwgZXhwZXJpZW5jZXMgIzIyLTIzOiBSZXNwb25zZXMgdG8gaW5kaXZpZHVhbCBpdGVtcyIsCiAgICAgICBzdWJ0aXRsZSA9ICJFcnJvciBiYXJzIGFyZSBib290c3RyYXBwZWQgOTUlIENJcyIsCiAgICAgICB4ID0gIlNpdGUiLCAKICAgICAgIHkgPSAiTWVhbiByZXNwb25zZSwgaS5lLiwgcHJvcC4gcmVzcG9uZGluZyAneWVzJ1xuKDAgPSBubywgMSA9IHllcykiKQpgYGAKCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMgUmVsYXRpb25zaGlwcyBiZXR3ZWVuIHBvcm9zaXR5IGFuZCBzcGlyaXR1YWwgZXhwZXJpZW5jZQoKRmluYWxseSwgSSB3aWxsIGNvbnNpZGVyIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBQb3Jvc2l0eSBzY29yZXMgYW5kIFNwaXJpdHVhbCBFeHBlcmllbmNlIHNjb3JlcywgY29tcGFyaW5nIHRoaXMgcmVsYXRpb25zaGlwIGFjcm9zcyBzaXRlcyBhbmQgZXhhbWluaW5nIHRoaXMgcmVsYXRpb25zaGlwIHdpdGhpbiBlYWNoIHNpdGUgaW5kaXZkaWR1YWxseS4gQWdhaW4sIEkgd2lsbCBleHBsb3JlIHR3byB3YXlzIG9mIGhhbmRsaW5nIHRoZSBkaXNjcmVwYW5jeSBiZXR3ZWVuIHF1ZXN0aW9ucyBhc2tlZCBpbiBUaGFpbGFuZCB2cy4gb3RoZXIgc2l0ZXMuCgojIyBDb25zaWRlcmluZyBhbGwgImJlaW5ncyIgKG1vcmUgZm9yIFRoYWlsYW5kKQoKYGBge3J9CmRfcG9yX3NwZXhfYmFzZV9xMnRvMjNfcHJvcGFsbCA8LSBkX3NwZXhfYmFzZV9xMnRvMjNfc2NvcmVkX3Byb3BhbGwgJT4lIAogIHJlbmFtZShzcGV4X3Njb3JlX3Byb3BhbGwgPSBzY29yZSkgJT4lCiAgZnVsbF9qb2luKGRfcG9yX3Njb3JlZCAlPiUgcmVuYW1lKHBvcl9zY29yZSA9IHNjb3JlKSkgJT4lCiAgZ3JvdXBfYnkoZXBpX2N0cnkpICU+JQogIG11dGF0ZShwb3Jfc2NvcmVfc3RkID0gc2NhbGUocG9yX3Njb3JlKSwKICAgICAgICAgc3BleF9zY29yZV9wcm9wYWxsX3N0ZCA9IHNjYWxlKHNwZXhfc2NvcmVfcHJvcGFsbCkpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBtdXRhdGUocG9yX3Njb3JlX3N0ZF9jb2xsYXBzZSA9IHNjYWxlKHBvcl9zY29yZSksCiAgICAgICAgIHNwZXhfc2NvcmVfcHJvcGFsbF9zdGRfY29sbGFwc2UgPSBzY2FsZShzcGV4X3Njb3JlX3Byb3BhbGwpKQoKIyBlZmZlY3QtY29kZSBieSBkZWZhdWx0CmNvbnRyYXN0cyhkX3Bvcl9zcGV4X2Jhc2VfcTJ0bzIzX3Byb3BhbGwkZXBpX2N0cnkpIDwtIGNvbnRyLnN1bSg1KQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC4zNSwgaW5jbHVkZSA9IEZ9CmdncGxvdChkX3Bvcl9zcGV4X2Jhc2VfcTJ0bzIzX3Byb3BhbGwsCiAgICAgICBhZXMoeCA9IHBvcl9zY29yZSwgeSA9IHNwZXhfc2NvcmVfcHJvcGFsbCwgY29sb3IgPSBlcGlfY3RyeSkpICsKICBmYWNldF9ncmlkKH4gZXBpX2N0cnkpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC4yLCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBjb2xvciA9ICJibGFjayIsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMTYsIDQpKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCAxLCAwLjI1KSkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiUmVsYXRpb25zaGlwIGJldHdlZW4gcG9yb3NpdHkgYW5kIHNwaXJpdHVhbCBleHBlcmllbmNlIiwKICAgICAgIHN1YnRpdGxlID0gIkluY2x1ZGVzIGFsbCBiZWluZ3MgZm9yIFRoYWlsYW5kIiwKICAgICAgIHggPSAiUG9yb3NpdHkgc2NvcmUgKDAtMTYpIiwKICAgICAgIHkgPSAiU3Bpcml0dWFsIGV4cGVyaWVuY2VcbnByb3BvcnRpb24gc2NvcmUgKDAtMSkiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC4zLCBpbmNsdWRlID0gVH0KZ2dwbG90KGRfcG9yX3NwZXhfYmFzZV9xMnRvMjNfcHJvcGFsbCwKICAgICAgIGFlcyh4ID0gcG9yX3Njb3JlX3N0ZF9jb2xsYXBzZSwgeSA9IHNwZXhfc2NvcmVfcHJvcGFsbF9zdGRfY29sbGFwc2UsIAogICAgICAgICAgIGNvbG9yID0gZXBpX2N0cnkpKSArCiAgZmFjZXRfd3JhcCh+IGVwaV9jdHJ5LCBuY29sID0gNSwgc2NhbGVzID0gImZyZWUiKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuMiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmxhY2siLCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC00LCA0LCAxKSkgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoLTQsIDQsIDEpKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgICBsYWJzKHRpdGxlID0gIlJlbGF0aW9uc2hpcCBiZXR3ZWVuIHBvcm9zaXR5IGFuZCBzcGlyaXR1YWwgZXhwZXJpZW5jZSIsCiAgICAgICBzdWJ0aXRsZSA9ICJJbmNsdWRlcyBhbGwgYmVpbmdzIGZvciBUaGFpbGFuZCIsCiAgICAgICB4ID0gIlBvcm9zaXR5IHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIiwKICAgICAgIHkgPSAiU3Bpcml0dWFsIGV4cC4gcHJvcG9ydGlvbiBzY29yZVxuKHN0ZC4gY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIikKYGBgCgpGcm9tIHRoZSBwbG90LCBpdCBpcyBjbGVhciB0aGF0IHRoZXJlIGlzIGEgZ2VuZXJhbCByZWxhdGlvbnNoaXAgYmV0d2VlbiBQb3Jvc2l0eSBhbmQgU3Bpcml0dWFsIEV4cGVyaWVuY2Ugc2NvcmVzLiBUaGUgc3RyZW5ndGggb2YgdGhpcyByZWxhdGlvbnNoaXBzIGFwcGVhcnMgdG8gdmFyeSBzb21ld2hhdCBhY3Jvc3Mgc2l0ZXMsIGJ1dCB2aXN1YWwgaW5zcGVjdGlvbiBzdWdnZXN0cyB0aGF0IHRoaXMgcmVsYXRpb25zaGlwIGlzIHByZXNlbnQgdG8gc29tZSBkZWdyZWUgaW4gZWFjaCBzaXRlIGluZGl2aWR1YWxseS4gCgpGaXJzdCwgSSdsbCBsb29rIGF0IHRoaXMgcmVsYXRpb25zaGlwIGNvbnNpZGVyaW5nIGFsbCBzaXRlcyBpbiB0aGUgc2FtZSBhbmFseXNpcyAoc3RhbmRhcmRpemluZyBzY29yZXMgY29sbGFwc2luZyBhY3Jvc3MgYWxsIHNpdGVzLCB0byBtYWludGFpbiB0aGUgcGF0dGVybiBmbyBnZW5lcmFsIGRpZmZlcmVuY2VzIGluIFBvcm9zaXR5IGFuZCBTcGlyaXR1YWwgRXhwZXJpZW5jZSBhY3Jvc3Mgc2l0ZXMpOgoKYGBge3J9CnJfcG9yX3NwZXhfcHJvcGFsbCA8LSBsbShwb3Jfc2NvcmVfc3RkX2NvbGxhcHNlIH4gc3BleF9zY29yZV9wcm9wYWxsX3N0ZF9jb2xsYXBzZSAqIGVwaV9jdHJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgZF9wb3Jfc3BleF9iYXNlX3EydG8yM19wcm9wYWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgY29udHJhc3RzID0gbGlzdChlcGlfY3RyeSA9IGNvbnRyYXN0c19jdHJ5X2N0cikpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpzdW1tYXJ5KHJfcG9yX3NwZXhfcHJvcGFsbCkkY29lZmZpY2llbnRzICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1wYXJhbWV0ZXIsIC1wKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSwKICAgICAgICBjYXB0aW9uID0gIlJlbGF0aW9uc2hpcCBiZXR3ZWVuIHBvcm9zaXR5IGFuZCBzcGlyaXR1YWwgZXhwZXJpZW5jZSwgY29tcGFyaW5nIGFjcm9zcyBzaXRlcyBbbW9kZWw6IGxtKHBvcl9zY29yZV9zdGRfY29sbGFwc2UgfiBzcGV4X3Njb3JlX3Byb3BhbGxfc3RkX2NvbGxhcHNlICogZXBpX2N0cnksIGRfcG9yX3NwZXhfYmFzZV9xMnRvMjNfcHJvcGFsbCldIikgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIHJvd19zcGVjKGMoMiwgNzoxMCksIGJvbGQgPSBUKQpgYGAKCkluY2x1ZGluZyBhbGwgb2YgdGhlIGRhdGEgaW4gYSBzaW5nbGUgYW5hbHlzaXMgc3VnZ2VzdHMgdGhhdCwgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMsIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBQb3Jvc2l0eSBhbmQgU3Bpcml0dWFsIEV4cGVyaWVuY2Ugc2NvcmVzIGlzIHNpZ25pZmljYW50bHkgcG9zaXRpdmUgKHNlZSAic3BleF9zY29yZV9wcm9wYWxsX3N0ZCIgcm93IGluIHRoZSB0YWJsZSBhYm92ZSkuIEhvd2V2ZXIsIHRoaXMgcmVsYXRpb25zaGlwIGFwcGVhcnMgdG8gYmUgc2lnbmlmaWNhbnRseSB3ZWFrZXIgYW1vbmcgcGFydGljaXBhbnRzIG91dHNpZGUgb2YgdGhlIFVTIHRoYW4gaXQgaXMgYW1vbmcgVVMgcGFydGljaXBhbnRzIChzZWUgInNwZXhfc2NvcmVfcHJvcGFsbF9zdGQ6ZXBpX2N0cnlub25VU19VUyIgcm93KSwgc2lnbmlmaWNhbnRseSB3ZWFrZXIgYW1vbmcgcGFydGljaXBhbnRzIGluIEdoYW5hIGFuZCBWYW51YXR1IHJlbGF0aXZlIHRvIHBhcnRpY2lwYW50cyBpbiBUaGFpbGFuZCBhbmQgQ2hpbmEgKHNlZSAic3BleF9zY29yZV9wcm9wYWxsX3N0ZDplcGlfY3RyeUdIVlRfVEhDSCIgcm93KSwgYW5kIHNpZ25pZmljYW50bHkgd2Vha2VyIGFtb25nIHBhcnRpY2lwYW50cyBpbiBHaGFuYSByZWxhdGl2ZSB0byBwYXJ0aWNpcGFudHMgaW4gVmFudWF0dSAoc2VlICJzcGV4X3Njb3JlX3Byb3BhbGxfc3RkOmVwaV9jdHJ5R0hfVlQiIHJvdykuIEluIG90aGVyIHdvcmRzLCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gUG9yb3NpdHkgYW5kIFNwaXJpdHVhbCBFeHBlcmllbmNlIHNlZW1zIHRvIGhhdmUgYmVlbiBzdHJvbmdlc3QgaW4gdGhlIFVTIGFuZCBDaGluZXNlIHNhbXBsZXMsIHdlYWtlciBpbiB0aGUgbmktVmFuIGFuZCBUaGFpIHNhbXBsZXMsIGFuZCB3ZWFrZXN0IGluIHRoZSBHaGFuYWlhbiBzYW1wbGUuIChUaGlzIGlzIHRydWUgZXZlbiBhZnRlciBhY2NvdW50aW5nIGZvciBvdmVyYWxsIGRpZmZlcmVuY2VzIGluIHBvcm9zaXR5IGFuZCBzcGlyaXR1YWwgZXhwZXJpZW5jZSBhY3Jvc3Mgc2l0ZXMuKQoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuMywgaW5jbHVkZSA9IFR9CmdncGxvdChkX3Bvcl9zcGV4X2Jhc2VfcTJ0bzIzX3Byb3BhbGwsCiAgICAgICBhZXMoeCA9IHBvcl9zY29yZV9zdGQsIHkgPSBzcGV4X3Njb3JlX3Byb3BhbGxfc3RkLCBjb2xvciA9IGVwaV9jdHJ5KSkgKwogIGZhY2V0X3dyYXAofiBlcGlfY3RyeSwgbmNvbCA9IDUsIHNjYWxlcyA9ICJmcmVlIikgKwogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjIsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIGNvbG9yID0gImJsYWNrIiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgIyBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDE2LCA0KSkgKwogICMgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCAyMiwgNCkpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICAgIGxhYnModGl0bGUgPSAiUmVsYXRpb25zaGlwIGJldHdlZW4gcG9yb3NpdHkgYW5kIHNwaXJpdHVhbCBleHBlcmllbmNlIiwKICAgICAgIHN1YnRpdGxlID0gIkluY2x1ZGVzIGFsbCBiZWluZ3MgZm9yIFRoYWlsYW5kIiwKICAgICAgIHggPSAiUG9yb3NpdHkgc2NvcmUgKHN0YW5kYXJkaXplZCB3aXRoaW4gZWFjaCBzaXRlKSIsCiAgICAgICB5ID0gIlNwaXJpdHVhbCBleHAuIHByb3BvcnRpb24gc2NvcmVcbihzdGFuZGFyZGl6ZWQgd2l0aGluIGVhY2ggc2l0ZSkiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC4zNSwgaW5jbHVkZSA9IEZ9CmdncGxvdChkX3Bvcl9zcGV4X2Jhc2VfcTJ0bzIzX3Byb3BhbGwgJT4lCiAgICAgICAgIGZpbHRlcihhYnMocG9yX3Njb3JlX3N0ZCkgPCAyLAogICAgICAgICAgICAgICAgYWJzKHNwZXhfc2NvcmVfcHJvcGFsbF9zdGQpIDwgMiksCiAgICAgICBhZXMoeCA9IHBvcl9zY29yZV9zdGQsIHkgPSBzcGV4X3Njb3JlX3Byb3BhbGxfc3RkLCBjb2xvciA9IGVwaV9jdHJ5KSkgKwogIGZhY2V0X3dyYXAofiBlcGlfY3RyeSwgbmNvbCA9IDUpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC4yLCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBjb2xvciA9ICJibGFjayIsIHNob3cubGVnZW5kID0gRikgKwogICMgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCAxNiwgNCkpICsKICAjIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMjIsIDQpKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJSZWxhdGlvbnNoaXAgYmV0d2VlbiBwb3Jvc2l0eSBhbmQgc3Bpcml0dWFsIGV4cGVyaWVuY2UiLAogICAgICAgc3VidGl0bGUgPSAiSW5jbHVkZXMgYWxsIGJlaW5ncyBmb3IgVGhhaWxhbmRcbkV4Y2x1ZGluZyBvdXRsaWVycyAoeiA+IDIgb3IgeiA8IC0yKSIsCiAgICAgICB4ID0gIlBvcm9zaXR5IHNjb3JlIChzdGFuZGFyZGl6ZWQgd2l0aGluIGVhY2ggc2l0ZSkiLAogICAgICAgeSA9ICJTcGlyaXR1YWwgZXhwLiBwcm9wb3J0aW9uIHNjb3JlXG4oc3RhbmRhcmRpemVkIHdpdGhpbiBlYWNoIHNpdGUpIikKYGBgCgpOZXh0LCBJJ2xsIGxvb2sgYXQgdGhpcyByZWxhdGlvbnNoaXAgY29uc2lkZXJpbmcgZWFjaCBzaXRlcyBpbmRpdmlkdWFsbHkgaW4gaXRzIG93biBhbmFseXNpcyAoc3RhbmRhcmRpemluZyBzY29yZXMgd2l0aGluIGVhY2ggc2l0ZSk6CgpgYGB7cn0Kcl9wb3Jfc3BleF9wcm9wYWxsX3VzIDwtIGxtKHBvcl9zY29yZV9zdGQgfiBzcGV4X3Njb3JlX3Byb3BhbGxfc3RkLAogICAgICAgICAgICAgICAgICAgICAgICAgICBkX3Bvcl9zcGV4X2Jhc2VfcTJ0bzIzX3Byb3BhbGwgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGVwaV9jdHJ5ID09ICJVUyIpKQoKcl9wb3Jfc3BleF9wcm9wYWxsX2doIDwtIGxtKHBvcl9zY29yZV9zdGQgfiBzcGV4X3Njb3JlX3Byb3BhbGxfc3RkLAogICAgICAgICAgICAgICAgICAgICAgICAgICBkX3Bvcl9zcGV4X2Jhc2VfcTJ0bzIzX3Byb3BhbGwgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGVwaV9jdHJ5ID09ICJHaGFuYSIpKQoKcl9wb3Jfc3BleF9wcm9wYWxsX3RoIDwtIGxtKHBvcl9zY29yZV9zdGQgfiBzcGV4X3Njb3JlX3Byb3BhbGxfc3RkLAogICAgICAgICAgICAgICAgICAgICAgICAgICBkX3Bvcl9zcGV4X2Jhc2VfcTJ0bzIzX3Byb3BhbGwgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGVwaV9jdHJ5ID09ICJUaGFpbGFuZCIpKQoKcl9wb3Jfc3BleF9wcm9wYWxsX2NoIDwtIGxtKHBvcl9zY29yZV9zdGQgfiBzcGV4X3Njb3JlX3Byb3BhbGxfc3RkLAogICAgICAgICAgICAgICAgICAgICAgICAgICBkX3Bvcl9zcGV4X2Jhc2VfcTJ0bzIzX3Byb3BhbGwgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGVwaV9jdHJ5ID09ICJDaGluYSIpKQoKcl9wb3Jfc3BleF9wcm9wYWxsX3Z0IDwtIGxtKHBvcl9zY29yZV9zdGQgfiBzcGV4X3Njb3JlX3Byb3BhbGxfc3RkLAogICAgICAgICAgICAgICAgICAgICAgICAgICBkX3Bvcl9zcGV4X2Jhc2VfcTJ0bzIzX3Byb3BhbGwgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGVwaV9jdHJ5ID09ICJWYW51YXR1IikpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpyYmluZChzdW1tYXJ5KHJfcG9yX3NwZXhfcHJvcGFsbF91cykkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlVTIiksCiAgICAgIHN1bW1hcnkocl9wb3Jfc3BleF9wcm9wYWxsX2doKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiR2hhbmEiKSwKICAgICAgc3VtbWFyeShyX3Bvcl9zcGV4X3Byb3BhbGxfdGgpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJUaGFpbGFuZCIpLAogICAgICBzdW1tYXJ5KHJfcG9yX3NwZXhfcHJvcGFsbF9jaCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIkNoaW5hIiksCiAgICAgIHN1bW1hcnkocl9wb3Jfc3BleF9wcm9wYWxsX3Z0KSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVmFudWF0dSIpKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtYyhwYXJhbWV0ZXIsIHAsIHNpdGUpKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBzZWxlY3QoLXNpdGUpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpLAogICAgICAgIGNhcHRpb24gPSAiUmVsYXRpb25zaGlwIGJldHdlZW4gcG9yb3NpdHkgYW5kIHNwaXJpdHVhbCBleHBlcmllbmNlLCB3aXRoaW4gZWFjaCBzaXRlIHNlcGFyYXRlbHkgW21vZGVsOiBsbShwb3Jfc2NvcmVfc3RkIH4gc3BleF9zY29yZV9wcm9wYWxsX3N0ZCwgZF9wb3Jfc3BleF9iYXNlX3EydG8yM19wcm9wYWxsICU+JSBmaWx0ZXIoZXBpX2N0cnkgPT0gLi4uKV0iKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgZ3JvdXBfcm93cygiVVMiLCAxLCAyKSAlPiUKICBncm91cF9yb3dzKCJHaGFuYSIsIDMsIDQpICU+JQogIGdyb3VwX3Jvd3MoIlRoYWlsYW5kIiwgNSwgNikgJT4lCiAgZ3JvdXBfcm93cygiQ2hpbmEiLCA3LCA4KSAlPiUKICBncm91cF9yb3dzKCJWYW51YXR1IiwgOSwgMTApICU+JQogIHJvd19zcGVjKGMoc2VxKDIsIDEwLCAyKSksIGJvbGQgPSBUKQpgYGAKClRoaXMgYW5hbHlzaXMgc3VnZ2VzdHMgdGhhdCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gUG9yb3NpdHkgYW5kIFNwaXJpdHVhbCBFeHBlcmllbmNlIGlzIHNpZ25maWNhbnRseSBwb3NpdGl2ZSBpbiBhbGwgZml2ZSBzaXRlcyBjb25zaWRlcmVkIGluZGl2aWR1YWxseS4gVGhlIHJlZ3Jlc3Npb24gY29lZmZpY2llbnRzICgiYiIgY29sdW1uIGluIHRoZSB0YWJsZSBhYm92ZSkgZnVydGhlciBjb25maXJtIHRoYXQgdGhlIHN0cmVuZ3RoIG9mIHRoaXMgcmVsYXRpb25oaXAgdmFyaWVkIGFjcm9zcyBzaXRlczogSXQgd2FzIHN0cm9uZ2VzdCBpbiBDaGluYSBhbmQgdGhlIFVTLCBtaWRkbGluZyBpbiBWYW51YXR1IGFuZCBUaGFpbGFuZCwgYW5kIHdlYWtlc3QgKGJ1dCBzdGlsbCBzaWduaWZpY2FudGx5IHBvc2l0aXZlKSBpbiBHaGFuYS4KCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMjIEJ5IGNoYXJpc21hdGljIHN0YXR1cwoKYGBge3J9CmRfcG9yX3NwZXhfYmFzZV9xMnRvMjNfcHJvcGFsbF9ieWNoYXJjIDwtIGRfc3BleF9iYXNlX3EydG8yM19zY29yZWRfcHJvcGFsbCAlPiUgCiAgcmVuYW1lKHNwZXhfc2NvcmVfcHJvcGFsbCA9IHNjb3JlKSAlPiUKICBmdWxsX2pvaW4oZF9wb3Jfc2NvcmVkICU+JSByZW5hbWUocG9yX3Njb3JlID0gc2NvcmUpKSAlPiUKICBncm91cF9ieShlcGlfY3RyeSwgZXBpX2NoYXJjKSAlPiUKICBtdXRhdGUocG9yX3Njb3JlX3N0ZCA9IHNjYWxlKHBvcl9zY29yZSksCiAgICAgICAgIHNwZXhfc2NvcmVfcHJvcGFsbF9zdGQgPSBzY2FsZShzcGV4X3Njb3JlX3Byb3BhbGwpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgbXV0YXRlKHBvcl9zY29yZV9zdGRfY29sbGFwc2UgPSBzY2FsZShwb3Jfc2NvcmUpLAogICAgICAgICBzcGV4X3Njb3JlX3Byb3BhbGxfc3RkX2NvbGxhcHNlID0gc2NhbGUoc3BleF9zY29yZV9wcm9wYWxsKSkKCiMgZWZmZWN0LWNvZGUgYnkgZGVmYXVsdApjb250cmFzdHMoZF9wb3Jfc3BleF9iYXNlX3EydG8yM19wcm9wYWxsX2J5Y2hhcmMkZXBpX2N0cnkpIDwtIGNvbnRyLnN1bSg1KQpjb250cmFzdHMoZF9wb3Jfc3BleF9iYXNlX3EydG8yM19wcm9wYWxsX2J5Y2hhcmMkZXBpX2NoYXJjKSA8LSBjb250ci5zdW0oMikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IEZ9CmdncGxvdChkX3Bvcl9zcGV4X2Jhc2VfcTJ0bzIzX3Byb3BhbGxfYnljaGFyYyAlPiUKICAgICAgICAgZmlsdGVyKCFpcy5uYShlcGlfY2hhcmMpKSwKICAgICAgIGFlcyh4ID0gcG9yX3Njb3JlLCB5ID0gc3BleF9zY29yZV9wcm9wYWxsLCBjb2xvciA9IGVwaV9jdHJ5LAogICAgICAgICAgIGx0eSA9IGVwaV9jaGFyYykpICsKICBmYWNldF9ncmlkKH4gZXBpX2N0cnkpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC4yLCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBjb2xvciA9ICJibGFjayIsIHNob3cubGVnZW5kID0gVCkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMTYsIDQpKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCAxLCAwLjI1KSkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIiwgZ3VpZGUgPSAibm9uZSIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIikgKwogIGxhYnModGl0bGUgPSAiUmVsYXRpb25zaGlwIGJldHdlZW4gcG9yb3NpdHkgYW5kIHNwaXJpdHVhbCBleHBlcmllbmNlIiwKICAgICAgIHN1YnRpdGxlID0gIkluY2x1ZGVzIGFsbCBiZWluZ3MgZm9yIFRoYWlsYW5kIiwKICAgICAgIHggPSAiUG9yb3NpdHkgc2NvcmUgKDAtMTYpIiwKICAgICAgIHkgPSAiU3Bpcml0dWFsIGV4cGVyaWVuY2VcbnByb3BvcnRpb24gc2NvcmUgKDAtMSkiLAogICAgICAgbHR5ID0gIkNoYXJpc21hdGljIHN0YXR1cyIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBGfQpnZ3Bsb3QoZF9wb3Jfc3BleF9iYXNlX3EydG8yM19wcm9wYWxsX2J5Y2hhcmMgJT4lCiAgICAgICAgIGZpbHRlcighaXMubmEoZXBpX2NoYXJjKSksCiAgICAgICBhZXMoeCA9IHBvcl9zY29yZV9zdGRfY29sbGFwc2UsIHkgPSBzcGV4X3Njb3JlX3Byb3BhbGxfc3RkX2NvbGxhcHNlLCAKICAgICAgICAgICBjb2xvciA9IGVwaV9jdHJ5LCBsdHkgPSBlcGlfY2hhcmMpKSArCiAgZmFjZXRfZ3JpZCh+IGVwaV9jdHJ5KSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuMiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmxhY2siLCBzaG93LmxlZ2VuZCA9IFQpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC00LCA0LCAxKSkgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoLTQsIDQsIDEpKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiLCBndWlkZSA9ICJub25lIikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSArCiAgbGFicyh0aXRsZSA9ICJSZWxhdGlvbnNoaXAgYmV0d2VlbiBwb3Jvc2l0eSBhbmQgc3Bpcml0dWFsIGV4cGVyaWVuY2UiLAogICAgICAgc3VidGl0bGUgPSAiSW5jbHVkZXMgYWxsIGJlaW5ncyBmb3IgVGhhaWxhbmQiLAogICAgICAgeCA9ICJQb3Jvc2l0eSBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIsCiAgICAgICB5ID0gIlNwaXJpdHVhbCBleHAuIHByb3BvcnRpb24gc2NvcmVcbihzdGQuIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIsCiAgICAgICBsdHkgPSAiQ2hhcmlzbWF0aWMgc3RhdHVzIikKYGBgCgpGcm9tIHRoZSBwbG90LCBpdCBsb29rcyBsaWtlIHRoaXMgcmVsYXRpb25zaGlwIHdhcyBzaW1pbGFyIGFjcm9zcyBjaGFyaXNtYXRpYyBhbmQgbm9uLWNoYXJpc21hdGljIHBhcnRpY2lwYW50cyAod2l0aCB0aGUgcG9zc2libGUgZXhjZXB0aW9uIG9mIFZhbnVhdHUsIHdoZXJlIGl0IGFwcGVhcnMgdG8gYmUgcGFydGljdWxhcmx5IHN0cm9uZyBhbW9uZyBjaGFyaXNtYXRpY3MpLgoKRmlyc3QsIEknbGwgbG9vayBhdCB0aGlzIHJlbGF0aW9uc2hpcCBjb25zaWRlcmluZyBhbGwgc2l0ZXMgaW4gdGhlIHNhbWUgYW5hbHlzaXMgKHN0YW5kYXJkaXppbmcgc2NvcmVzIGNvbGxhcHNpbmcgYWNyb3NzIGFsbCBzaXRlcywgdG8gbWFpbnRhaW4gdGhlIHBhdHRlcm4gZm8gZ2VuZXJhbCBkaWZmZXJlbmNlcyBpbiBQb3Jvc2l0eSBhbmQgU3Bpcml0dWFsIEV4cGVyaWVuY2UgYWNyb3NzIHNpdGVzKToKCmBgYHtyfQpyX3Bvcl9zcGV4X3Byb3BhbGxfYnljaGFyYyA8LSBsbShwb3Jfc2NvcmVfc3RkX2NvbGxhcHNlIH4gc3BleF9zY29yZV9wcm9wYWxsX3N0ZF9jb2xsYXBzZSAqIGVwaV9jdHJ5ICogZXBpX2NoYXJjLAogICAgICAgICAgICAgICAgICAgICAgICAgZF9wb3Jfc3BleF9iYXNlX3EydG8yM19wcm9wYWxsX2J5Y2hhcmMsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250cmFzdHMgPSBsaXN0KGVwaV9jdHJ5ID0gY29udHJhc3RzX2N0cnlfY3RyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcGlfY2hhcmMgPSBjb250cmFzdHNfY2hhcmNfZHVtKSkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnN1bW1hcnkocl9wb3Jfc3BleF9wcm9wYWxsX2J5Y2hhcmMpJGNvZWZmaWNpZW50cyAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtcGFyYW1ldGVyLCAtcCksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIiksCiAgICAgICAgY2FwdGlvbiA9ICJSZWxhdGlvbnNoaXAgYmV0d2VlbiBwb3Jvc2l0eSBhbmQgc3Bpcml0dWFsIGV4cGVyaWVuY2UsIGNvbXBhcmluZyBhY3Jvc3Mgc2l0ZXMgYW5kIGNoYXJpc21hdGljIHN0YXR1cyBbbW9kZWw6IGxtKHBvcl9zY29yZV9zdGRfY29sbGFwc2UgfiBzcGV4X3Njb3JlX3Byb3BhbGxfc3RkX2NvbGxhcHNlICogZXBpX2N0cnkgKiBlcGlfY2hhcmMsIGRfcG9yX3NwZXhfYmFzZV9xMnRvMjNfcHJvcGFsbCldIikgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIHJvd19zcGVjKGMoMiwgODoxMSksIGJvbGQgPSBUKQpgYGAKCkFtb25nIG90aGVyIHRoaW5ncywgdGhpcyBhbmFseXNpcyBzdWdnZXN0cyB0aGF0IHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBQb3Jvc2l0eSBhbmQgU3Bpcml0dWFsIEV4cGVyaWVuY2UgaXMgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSBhbW9uZyBub24tY2hhcmlzbWF0aWNzLCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcyAoc2VlICJzcGV4X3Njb3JlX3Byb3BhbGxfc3RkIiByb3cgaW4gdGhlIHRhYmxlIGFib3ZlKS4gSW4gYWRkaXRpb24gdG8gdmFyeWluZyBhY3Jvc3Mgc2l0ZXMsIHRoZSBzdHJlbmd0aCBvZiB0aGlzIHJlbGF0aW9uc2hpcCBhbHNvIHZhcmllZCB3aXRoIGNoYXJpc21hdGljIHN0YXR1czogSXQgd2FzIHBhcnRpY3VsYXJseSBzdHJvbmcgYW1vbmcgY2hhcmlzbWF0aWNzIHJlbGF0aXZlIHRvIG5vbi1jaGFyaXNtYXRpYyAoc2VlICJzcGV4X3Njb3JlX3Byb3BhbGxfc3RkX2NvbGxhcHNlOmVwaV9jaGFyY2NoYXJjX25vbiIgcm93KS4KCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpnZ3Bsb3QoZF9wb3Jfc3BleF9iYXNlX3EydG8yM19wcm9wYWxsICU+JQogICAgICAgICBmaWx0ZXIoIWlzLm5hKGVwaV9jaGFyYykpLAogICAgICAgYWVzKHggPSBwb3Jfc2NvcmVfc3RkLCB5ID0gc3BleF9zY29yZV9wcm9wYWxsX3N0ZCwgY29sb3IgPSBlcGlfY3RyeSwKICAgICAgICAgICBsdHkgPSBlcGlfY2hhcmMpKSArCiAgZmFjZXRfd3JhcCh+IGVwaV9jdHJ5LCBuY29sID0gNSwgc2NhbGVzID0gImZyZWUiKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuMiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmxhY2siLCBzaG93LmxlZ2VuZCA9IFQpICsKICAjIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMTYsIDQpKSArCiAgIyBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDIyLCA0KSkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiLCBndWlkZSA9ICJub25lIikgKwogICAgbGFicyh0aXRsZSA9ICJSZWxhdGlvbnNoaXAgYmV0d2VlbiBwb3Jvc2l0eSBhbmQgc3Bpcml0dWFsIGV4cGVyaWVuY2UiLAogICAgICAgc3VidGl0bGUgPSAiSW5jbHVkZXMgYWxsIGJlaW5ncyBmb3IgVGhhaWxhbmQiLAogICAgICAgeCA9ICJQb3Jvc2l0eSBzY29yZSAoc3RhbmRhcmRpemVkIHdpdGhpbiBlYWNoIHNpdGUpIiwKICAgICAgIHkgPSAiU3Bpcml0dWFsIGV4cC4gcHJvcG9ydGlvbiBzY29yZVxuKHN0YW5kYXJkaXplZCB3aXRoaW4gZWFjaCBzaXRlKSIsCiAgICAgICBsdHkgPSAiQ2hhcmlzbWF0aWMgc3RhdHVzIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IEZ9CmdncGxvdChkX3Bvcl9zcGV4X2Jhc2VfcTJ0bzIzX3Byb3BhbGwgJT4lCiAgICAgICAgIGZpbHRlcihhYnMocG9yX3Njb3JlX3N0ZCkgPCAyLAogICAgICAgICAgICAgICAgYWJzKHNwZXhfc2NvcmVfcHJvcGFsbF9zdGQpIDwgMiwKICAgICAgICAgICAgICAgICFpcy5uYShlcGlfY2hhcmMpKSwKICAgICAgIGFlcyh4ID0gcG9yX3Njb3JlX3N0ZCwgeSA9IHNwZXhfc2NvcmVfcHJvcGFsbF9zdGQsIGNvbG9yID0gZXBpX2N0cnksCiAgICAgICAgICAgbHR5ID0gZXBpX2NoYXJjKSkgKwogIGZhY2V0X3dyYXAofiBlcGlfY3RyeSwgbmNvbCA9IDUpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC4yLCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBjb2xvciA9ICJibGFjayIsIHNob3cubGVnZW5kID0gVCkgKwogICMgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCAxNiwgNCkpICsKICAjIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMjIsIDQpKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiLCBndWlkZSA9ICJub25lIikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSArCiAgbGFicyh0aXRsZSA9ICJSZWxhdGlvbnNoaXAgYmV0d2VlbiBwb3Jvc2l0eSBhbmQgc3Bpcml0dWFsIGV4cGVyaWVuY2UiLAogICAgICAgc3VidGl0bGUgPSAiSW5jbHVkZXMgYWxsIGJlaW5ncyBmb3IgVGhhaWxhbmRcbkV4Y2x1ZGluZyBvdXRsaWVycyAoeiA+IDIgb3IgeiA8IC0yKSIsCiAgICAgICB4ID0gIlBvcm9zaXR5IHNjb3JlIChzdGFuZGFyZGl6ZWQgd2l0aGluIGVhY2ggc2l0ZSkiLAogICAgICAgeSA9ICJTcGlyaXR1YWwgZXhwLiBwcm9wb3J0aW9uIHNjb3JlXG4oc3RhbmRhcmRpemVkIHdpdGhpbiBlYWNoIHNpdGUpIiwKICAgICAgIGx0eSA9ICJDaGFyaXNtYXRpYyBzdGF0dXMiKQpgYGAKCk5leHQsIEknbGwgbG9vayBhdCB0aGlzIHJlbGF0aW9uc2hpcCBjb25zaWRlcmluZyBlYWNoIHNpdGVzIGluZGl2aWR1YWxseSBpbiBpdHMgb3duIGFuYWx5c2lzIChzdGFuZGFyZGl6aW5nIHNjb3JlcyB3aXRoaW4gZWFjaCBzaXRlKToKCmBgYHtyfQpyX3Bvcl9zcGV4X3Byb3BhbGxfdXMgPC0gbG0ocG9yX3Njb3JlX3N0ZCB+IHNwZXhfc2NvcmVfcHJvcGFsbF9zdGQgKiBlcGlfY2hhcmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRfcG9yX3NwZXhfYmFzZV9xMnRvMjNfcHJvcGFsbCAlPiUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoZXBpX2N0cnkgPT0gIlVTIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyYXN0cyA9IGxpc3QoZXBpX2NoYXJjID0gY29udHJhc3RzX2NoYXJjX2R1bSkpCgpyX3Bvcl9zcGV4X3Byb3BhbGxfZ2ggPC0gbG0ocG9yX3Njb3JlX3N0ZCB+IHNwZXhfc2NvcmVfcHJvcGFsbF9zdGQgKiBlcGlfY2hhcmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRfcG9yX3NwZXhfYmFzZV9xMnRvMjNfcHJvcGFsbCAlPiUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoZXBpX2N0cnkgPT0gIkdoYW5hIiksIAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cmFzdHMgPSBsaXN0KGVwaV9jaGFyYyA9IGNvbnRyYXN0c19jaGFyY19kdW0pKQoKcl9wb3Jfc3BleF9wcm9wYWxsX3RoIDwtIGxtKHBvcl9zY29yZV9zdGQgfiBzcGV4X3Njb3JlX3Byb3BhbGxfc3RkICogZXBpX2NoYXJjLAogICAgICAgICAgICAgICAgICAgICAgICAgICBkX3Bvcl9zcGV4X2Jhc2VfcTJ0bzIzX3Byb3BhbGwgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGVwaV9jdHJ5ID09ICJUaGFpbGFuZCIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cmFzdHMgPSBsaXN0KGVwaV9jaGFyYyA9IGNvbnRyYXN0c19jaGFyY19kdW0pKQoKcl9wb3Jfc3BleF9wcm9wYWxsX2NoIDwtIGxtKHBvcl9zY29yZV9zdGQgfiBzcGV4X3Njb3JlX3Byb3BhbGxfc3RkICogZXBpX2NoYXJjLAogICAgICAgICAgICAgICAgICAgICAgICAgICBkX3Bvcl9zcGV4X2Jhc2VfcTJ0bzIzX3Byb3BhbGwgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGVwaV9jdHJ5ID09ICJDaGluYSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cmFzdHMgPSBsaXN0KGVwaV9jaGFyYyA9IGNvbnRyYXN0c19jaGFyY19kdW0pKQoKcl9wb3Jfc3BleF9wcm9wYWxsX3Z0IDwtIGxtKHBvcl9zY29yZV9zdGQgfiBzcGV4X3Njb3JlX3Byb3BhbGxfc3RkICogZXBpX2NoYXJjLAogICAgICAgICAgICAgICAgICAgICAgICAgICBkX3Bvcl9zcGV4X2Jhc2VfcTJ0bzIzX3Byb3BhbGwgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGVwaV9jdHJ5ID09ICJWYW51YXR1IiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyYXN0cyA9IGxpc3QoZXBpX2NoYXJjID0gY29udHJhc3RzX2NoYXJjX2R1bSkpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpyYmluZChzdW1tYXJ5KHJfcG9yX3NwZXhfcHJvcGFsbF91cykkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlVTIiksCiAgICAgIHN1bW1hcnkocl9wb3Jfc3BleF9wcm9wYWxsX2doKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiR2hhbmEiKSwKICAgICAgc3VtbWFyeShyX3Bvcl9zcGV4X3Byb3BhbGxfdGgpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJUaGFpbGFuZCIpLAogICAgICBzdW1tYXJ5KHJfcG9yX3NwZXhfcHJvcGFsbF9jaCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIkNoaW5hIiksCiAgICAgIHN1bW1hcnkocl9wb3Jfc3BleF9wcm9wYWxsX3Z0KSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVmFudWF0dSIpKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtYyhwYXJhbWV0ZXIsIHAsIHNpdGUpKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBzZWxlY3QoLXNpdGUpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpLAogICAgICAgIGNhcHRpb24gPSAiUmVsYXRpb25zaGlwIGJldHdlZW4gcG9yb3NpdHkgYW5kIHNwaXJpdHVhbCBleHBlcmllbmNlLCB3aXRoaW4gZWFjaCBzaXRlIHNlcGFyYXRlbHkgW21vZGVsOiBsbShwb3Jfc2NvcmVfc3RkIH4gc3BleF9zY29yZV9wcm9wYWxsX3N0ZCAqIGVwaV9jaGFyYywgZF9wb3Jfc3BleF9iYXNlX3EydG8yM19wcm9wYWxsICU+JSBmaWx0ZXIoZXBpX2N0cnkgPT0gLi4uKV0iKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgZ3JvdXBfcm93cygiVVMiLCAxLCA0KSAlPiUKICBncm91cF9yb3dzKCJHaGFuYSIsIDUsIDgpICU+JQogIGdyb3VwX3Jvd3MoIlRoYWlsYW5kIiwgOSwgMTIpICU+JQogIGdyb3VwX3Jvd3MoIkNoaW5hIiwgMTMsIDE2KSAlPiUKICBncm91cF9yb3dzKCJWYW51YXR1IiwgMTcsIDIwKSAlPiUKICByb3dfc3BlYyhjKHNlcSgyLCAxOCwgNCkpLCBib2xkID0gVCkKYGBgCgpUaGlzIGFuYWx5c2lzIHN1Z2dlc3RzIHRoYXQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIFBvcm9zaXR5IGFuZCBTcGlyaXR1YWwgRXhwZXJpZW5jZSBpcyBzaWduZmljYW50bHkgcG9zaXRpdmUgYW1vbmcgbm9uLWNoYXJpc21hdGljcyBpbiBhbGwgZml2ZSBzaXRlcyBjb25zaWRlcmVkIGluZGl2aWR1YWxseS4gVGhlIHN0cmVuZ3RoIG9mIHRoaXMgcmVsYXRpb25zaGlwIG9ubHkgc2VlbXMgdG8gdmFyeSBieSBjaGFyaXNtYXRpYyBzdGF0dXMgaW4gQ2hpbmEgKHB1enpsaW5nLCBub3QgaW4gVmFudWF0dSwgdGhvdWdoIHRoYXQncyB3aGF0IGl0IGxvb2tlZCBsaWtlIGZyb20gdGhlIHBsb3QpLgoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyMgQ29uc2lkZXJpbmcgY2hhcmlzbWF0aWNzIGFsb25lCgpgYGB7cn0Kcl9wb3Jfc3BleF9wcm9wYWxsX2NoYXJjb25seSA8LSAKICBsbShwb3Jfc2NvcmVfc3RkX2NvbGxhcHNlIH4gc3BleF9zY29yZV9wcm9wYWxsX3N0ZF9jb2xsYXBzZSAqIGVwaV9jdHJ5LAogICAgIGRfcG9yX3NwZXhfYmFzZV9xMnRvMjNfcHJvcGFsbCAlPiUKICAgICAgIGZpbHRlcihlcGlfY2hhcmMgPT0gImNoYXJpc21hdGljIiwKICAgICAgICAgICAgICBlcGlfY3RyeSAhPSAiQ2hpbmEiKSAlPiUKICAgICAgIG11dGF0ZShlcGlfY3RyeSA9IGZhY3RvcihlcGlfY3RyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJVUyIsICJHaGFuYSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRoYWlsYW5kIiwgIlZhbnVhdHUiKSkpLAogICAgIGNvbnRyYXN0cyA9IGxpc3QoZXBpX2N0cnkgPSBjYmluZCgibm9uVVNfVVMiID0gYygtMywgMSwgMSwgMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJHSFZUX1RIIiA9IGMoMCwgMSwgLTIsIDEpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiR0hfVlQiID0gYygwLCAxLCAwLCAtMSkpKSkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnN1bW1hcnkocl9wb3Jfc3BleF9wcm9wYWxsX2NoYXJjb25seSkkY29lZmZpY2llbnRzICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1wYXJhbWV0ZXIsIC1wKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSwKICAgICAgICBjYXB0aW9uID0gIlJlbGF0aW9uc2hpcCBiZXR3ZWVuIHBvcm9zaXR5IGFuZCBzcGlyaXR1YWwgZXhwZXJpZW5jZSwgY29tcGFyaW5nIGFjcm9zcyBzaXRlcywgY29uc2lkZXJpbmcgY2hhcmlzbWF0aWNzIG9ubHkgW21vZGVsOiBsbShwb3Jfc2NvcmVfc3RkX2NvbGxhcHNlIH4gc3BleF9zY29yZV9wcm9wYWxsX3N0ZF9jb2xsYXBzZSAqIGVwaV9jdHJ5LCBkX3Bvcl9zcGV4X2Jhc2VfcTJ0bzIzX3Byb3BhbGwgJT4lIGZpbHRlciguLi4pKV0iKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgcm93X3NwZWMoYygyLCA2OjgpLCBib2xkID0gVCkKYGBgCgpUaGUgcmVsYXRpb25zaGlwIGJldHdlZW4gcG9yb3NpdHkgYW5kIHNwaXJpdHVhbCBleHBlcmllbmNlIGlzIHNpZ25pZmljYW50bHkgcG9zaXRpdmUgYW1vbmcgY2hhcmlzbWF0aWNzIGNvbnNpZGVyZWQgYWxvbmUgKGV4Y2x1ZGluZyB0aGUgMTEgY2hhcmlzbWF0aWNzIGZyb20gQ2hpbmEsIHNpbmNlIHRoaXMgaXMgc3VjaCBhIHNtYWxsIHNhbXBsZSkuIFRoaXMgcmVsYXRpb25zaGlwIGlzIHN0cm9uZ2VyIGFtb25nIGNoYXJpc21hdGljcyBpbiBWYW51YXR1IHRoYW4gYW1vbmcgY2hhcmlzbWF0aWNzIGluIEdoYW5hLgoKYGBge3J9CnJfcG9yX3NwZXhfcHJvcGFsbF91cyA8LSBsbShwb3Jfc2NvcmVfc3RkIH4gc3BleF9zY29yZV9wcm9wYWxsX3N0ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZF9wb3Jfc3BleF9iYXNlX3EydG8yM19wcm9wYWxsICU+JQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihlcGlfY3RyeSA9PSAiVVMiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXBpX2NoYXJjID09ICJjaGFyaXNtYXRpYyIpKQoKcl9wb3Jfc3BleF9wcm9wYWxsX2doIDwtIGxtKHBvcl9zY29yZV9zdGQgfiBzcGV4X3Njb3JlX3Byb3BhbGxfc3RkLAogICAgICAgICAgICAgICAgICAgICAgICAgICBkX3Bvcl9zcGV4X2Jhc2VfcTJ0bzIzX3Byb3BhbGwgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGVwaV9jdHJ5ID09ICJHaGFuYSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVwaV9jaGFyYyA9PSAiY2hhcmlzbWF0aWMiKSkKCnJfcG9yX3NwZXhfcHJvcGFsbF90aCA8LSBsbShwb3Jfc2NvcmVfc3RkIH4gc3BleF9zY29yZV9wcm9wYWxsX3N0ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZF9wb3Jfc3BleF9iYXNlX3EydG8yM19wcm9wYWxsICU+JQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihlcGlfY3RyeSA9PSAiVGhhaWxhbmQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcGlfY2hhcmMgPT0gImNoYXJpc21hdGljIikpCgojIHJfcG9yX3NwZXhfcHJvcGFsbF9jaCA8LSBsbShwb3Jfc2NvcmVfc3RkIH4gc3BleF9zY29yZV9wcm9wYWxsX3N0ZCwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkX3Bvcl9zcGV4X2Jhc2VfcTJ0bzIzX3Byb3BhbGwgJT4lCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoZXBpX2N0cnkgPT0gIkNoaW5hIiwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcGlfY2hhcmMgPT0gImNoYXJpc21hdGljIikpCgpyX3Bvcl9zcGV4X3Byb3BhbGxfdnQgPC0gbG0ocG9yX3Njb3JlX3N0ZCB+IHNwZXhfc2NvcmVfcHJvcGFsbF9zdGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRfcG9yX3NwZXhfYmFzZV9xMnRvMjNfcHJvcGFsbCAlPiUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoZXBpX2N0cnkgPT0gIlZhbnVhdHUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcGlfY2hhcmMgPT0gImNoYXJpc21hdGljIikpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpyYmluZChzdW1tYXJ5KHJfcG9yX3NwZXhfcHJvcGFsbF91cykkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlVTIiksCiAgICAgIHN1bW1hcnkocl9wb3Jfc3BleF9wcm9wYWxsX2doKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiR2hhbmEiKSwKICAgICAgc3VtbWFyeShyX3Bvcl9zcGV4X3Byb3BhbGxfdGgpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJUaGFpbGFuZCIpLAogICAgICAjIHN1bW1hcnkocl9wb3Jfc3BleF9wcm9wYWxsX2NoKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICMgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICMgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAjICAgbXV0YXRlKHNpdGUgPSAiQ2hpbmEiKSwKICAgICAgc3VtbWFyeShyX3Bvcl9zcGV4X3Byb3BhbGxfdnQpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJWYW51YXR1IikpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1jKHBhcmFtZXRlciwgcCwgc2l0ZSkpLCBmdW5zKHJvdW5kKC4sIDIpKSkgJT4lCiAgbXV0YXRlKHAgPSBpZmVsc2UocCA8IDAuMDAxLCAiPDAuMDAxIiwgcm91bmQocCwgMykpLAogICAgICAgICBzaWduaWZpY2FudCA9IGlmZWxzZShwIDwgMC4wNSwgIioiLCAiIikpICU+JQogIHNlbGVjdCgtc2l0ZSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIiksCiAgICAgICAgY2FwdGlvbiA9ICJSZWxhdGlvbnNoaXAgYmV0d2VlbiBwb3Jvc2l0eSBhbmQgc3Bpcml0dWFsIGV4cGVyaWVuY2UsIHdpdGhpbiBlYWNoIHNpdGUgc2VwYXJhdGVseSBbbW9kZWw6IGxtKHBvcl9zY29yZV9zdGQgfiBzcGV4X3Njb3JlX3Byb3BhbGxfc3RkLCBkX3Bvcl9zcGV4X2Jhc2VfcTJ0bzIzX3Byb3BhbGwgJT4lIGZpbHRlcihlcGlfY3RyeSA9PSAuLi4sIGVwaV9jaGFyYyA9PSAnY2hhcmlzbWF0aWMnKV0iKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgZ3JvdXBfcm93cygiVVMiLCAxLCAyKSAlPiUKICBncm91cF9yb3dzKCJHaGFuYSIsIDMsIDQpICU+JQogIGdyb3VwX3Jvd3MoIlRoYWlsYW5kIiwgNSwgNikgJT4lCiAgZ3JvdXBfcm93cygiVmFudWF0dSIsIDcsIDgpICU+JQogIHJvd19zcGVjKGMoc2VxKDIsIDksIDIpKSwgYm9sZCA9IFQpCmBgYAoKQW5kIGl0J3Mgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSBpbiBlYWNoIHNhbXBsZSBvZiBjaGFyaXNtYXRpY3MsIGNvbnNpZGVyZWQgYWxvbmUgKGFnYWluLCBpZ25vcmluZyBDaGluYSkuCgojIyMgQnkgcmVsaWdpb3NpdHkKCldoYXQgaGFwcGVucyB3aGVuIHdlIGluY2x1ZGUgc2VsZi1yZXBvcnRlZCByZWxpZ2lvc2l0eSBpbiB0aGVzZSBtb2RlbHM/CgpGaXJzdCwgSSdsbCBsb29rIGF0IHRoaXMgcmVsYXRpb25zaGlwIGNvbnNpZGVyaW5nIGFsbCBzaXRlcyBpbiB0aGUgc2FtZSBhbmFseXNpcyAoc3RhbmRhcmRpemluZyBzY29yZXMgY29sbGFwc2luZyBhY3Jvc3MgYWxsIHNpdGVzLCB0byBtYWludGFpbiB0aGUgcGF0dGVybiBmbyBnZW5lcmFsIGRpZmZlcmVuY2VzIGluIFBvcm9zaXR5IGFuZCBTcGlyaXR1YWwgRXhwZXJpZW5jZSBhY3Jvc3Mgc2l0ZXMpOgoKYGBge3J9CnJfcG9yX3NwZXhfcHJvcGFsbF9ob3dyIDwtIGxtKHBvcl9zY29yZV9zdGRfY29sbGFwc2UgfiBzcGV4X3Njb3JlX3Byb3BhbGxfc3RkX2NvbGxhcHNlICogZXBpX2N0cnkgKiBlcGlfZGVtb19ob3dyX251bSwKICAgICAgICAgICAgICAgICAgICAgICAgIGRfcG9yX3NwZXhfYmFzZV9xMnRvMjNfcHJvcGFsbF9ieWNoYXJjICU+JQogICAgICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGUoZXBpX2RlbW9faG93cl9udW0gPSBzY2FsZShlcGlfZGVtb19ob3dyX251bSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgY29udHJhc3RzID0gbGlzdChlcGlfY3RyeSA9IGNvbnRyYXN0c19jdHJ5X2N0cikpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBGfQpzdW1tYXJ5KHJfcG9yX3NwZXhfcHJvcGFsbF9ob3dyKSRjb2VmZmljaWVudHMgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgcmVuYW1lKGIgPSBFc3RpbWF0ZSwgYHN0YW5kYXJkIGVycm9yYCA9IFN0ZC4uRXJyb3IsIGB0YCA9IHQudmFsdWUsCiAgICAgICAgIHAgPSBQci4uLnQuLikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoLXBhcmFtZXRlciwgLXApLCBmdW5zKHJvdW5kKC4sIDIpKSkgJT4lCiAgbXV0YXRlKHAgPSBpZmVsc2UocCA8IDAuMDAxLCAiPDAuMDAxIiwgcm91bmQocCwgMykpLAogICAgICAgICBzaWduaWZpY2FudCA9IGlmZWxzZShwIDwgMC4wNSwgIioiLCAiIikpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpLAogICAgICAgIGNhcHRpb24gPSAiUmVsYXRpb25zaGlwIGJldHdlZW4gcG9yb3NpdHkgYW5kIHNwaXJpdHVhbCBleHBlcmllbmNlLCBjb21wYXJpbmcgYWNyb3NzIHNpdGVzLCB0YWtpbmcgaW50byBhY2NvdW50IHNlbGYtcmVwb3J0ZWQgcmVsaWdpb3NpdHkgW21vZGVsOiBsbShwb3Jfc2NvcmVfc3RkX2NvbGxhcHNlIH4gc3BleF9zY29yZV9wcm9wYWxsX3N0ZF9jb2xsYXBzZSAqIGVwaV9jdHJ5ICogZXBpX2RlbW9faG93cl9udW0sIGRfcG9yX3NwZXhfYmFzZV9xMnRvMjNfcHJvcGFsbCldIikgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIHJvd19zcGVjKGMoMiwgNywgMTIpLCBib2xkID0gVCkKYGBgCgpgYGB7cn0Kcl9wb3Jfc3BleF9wcm9wYWxsX2J5Y2hhcmNfaG93ciA8LSBsbShwb3Jfc2NvcmVfc3RkX2NvbGxhcHNlIH4gc3BleF9zY29yZV9wcm9wYWxsX3N0ZF9jb2xsYXBzZSAqIGVwaV9jdHJ5ICogZXBpX2NoYXJjICogZXBpX2RlbW9faG93cl9udW0sCiAgICAgICAgICAgICAgICAgICAgICAgICBkX3Bvcl9zcGV4X2Jhc2VfcTJ0bzIzX3Byb3BhbGxfYnljaGFyYyAlPiUKICAgICAgICAgICAgICAgICAgICAgICAgICAgbXV0YXRlKGVwaV9kZW1vX2hvd3JfbnVtID0gc2NhbGUoZXBpX2RlbW9faG93cl9udW0pKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyYXN0cyA9IGxpc3QoZXBpX2N0cnkgPSBjb250cmFzdHNfY3RyeV9jdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVwaV9jaGFyYyA9IGNvbnRyYXN0c19jaGFyY19kdW0pKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0Kc3VtbWFyeShyX3Bvcl9zcGV4X3Byb3BhbGxfYnljaGFyY19ob3dyKSRjb2VmZmljaWVudHMgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgcmVuYW1lKGIgPSBFc3RpbWF0ZSwgYHN0YW5kYXJkIGVycm9yYCA9IFN0ZC4uRXJyb3IsIGB0YCA9IHQudmFsdWUsCiAgICAgICAgIHAgPSBQci4uLnQuLikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoLXBhcmFtZXRlciwgLXApLCBmdW5zKHJvdW5kKC4sIDIpKSkgJT4lCiAgbXV0YXRlKHAgPSBpZmVsc2UocCA8IDAuMDAxLCAiPDAuMDAxIiwgcm91bmQocCwgMykpLAogICAgICAgICBzaWduaWZpY2FudCA9IGlmZWxzZShwIDwgMC4wNSwgIioiLCAiIikpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpLAogICAgICAgIGNhcHRpb24gPSAiUmVsYXRpb25zaGlwIGJldHdlZW4gcG9yb3NpdHkgYW5kIHNwaXJpdHVhbCBleHBlcmllbmNlLCBjb21wYXJpbmcgYWNyb3NzIHNpdGVzIGFuZCBjaGFyaXNtYXRpYyBzdGF0dXMsIHRha2luZyBpbnRvIGFjY291bnQgc2VsZi1yZXBvcnRlZCByZWxpZ2lvc2l0eSBbbW9kZWw6IGxtKHBvcl9zY29yZV9zdGRfY29sbGFwc2UgfiBzcGV4X3Njb3JlX3Byb3BhbGxfc3RkX2NvbGxhcHNlICogZXBpX2N0cnkgKiBlcGlfY2hhcmMgKiBlcGlfZGVtb19ob3dyX251bSwgZF9wb3Jfc3BleF9iYXNlX3EydG8yM19wcm9wYWxsKV0iKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgcm93X3NwZWMoYygyLCA4LCAxOCksIGJvbGQgPSBUKQpgYGAKCkFtb25nIG90aGVyIHRoaW5ncywgdGhpcyBhbmFseXNpcyBzdWdnZXN0cyB0aGF0IHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBQb3Jvc2l0eSBhbmQgU3Bpcml0dWFsIEV4cGVyaWVuY2UgaXMgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSBhbW9uZyBub24tY2hhcmlzbWF0aWNzLCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcywgX2V2ZW4gYWZ0ZXIgY29udHJvbGxpbmcgZm9yIHJlbGlnaW9zaXR5XyAoc2VlICJzcGV4X3Njb3JlX3Byb3BhbGxfc3RkIiByb3cgaW4gdGhlIHRhYmxlIGFib3ZlKeKAlGJ1dCBpdCBtYXkgaGF2ZSBiZWVuIHdlYWtlciBhbW9uZyBtb3JlIHJlbGlnaW91cyBwYXJ0aWNpcGFudHMgKHNlZSAic3BleF9zY29yZV9wcm9wYWxsX3N0ZF9jb2xsYXBzZTplcGlfZGVtb19ob3dyX251bSIgcm93KS4KCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KTmV4dCwgSSdsbCBsb29rIGF0IHRoaXMgcmVsYXRpb25zaGlwIGNvbnNpZGVyaW5nIGVhY2ggc2l0ZXMgaW5kaXZpZHVhbGx5IGluIGl0cyBvd24gYW5hbHlzaXMgKHN0YW5kYXJkaXppbmcgc2NvcmVzIHdpdGhpbiBlYWNoIHNpdGUpOgoKYGBge3J9CnJfcG9yX3NwZXhfcHJvcGFsbF9ob3dyX3VzIDwtIGxtKAogIHBvcl9zY29yZV9zdGQgfiBzcGV4X3Njb3JlX3Byb3BhbGxfc3RkICogZXBpX2NoYXJjICogZXBpX2RlbW9faG93cl9udW0sCiAgZF9wb3Jfc3BleF9iYXNlX3EydG8yM19wcm9wYWxsICU+JQogICAgZmlsdGVyKGVwaV9jdHJ5ID09ICJVUyIpICU+JQogICAgZ3JvdXBfYnkoZXBpX2N0cnkpICU+JQogICAgbXV0YXRlKGVwaV9kZW1vX2hvd3JfbnVtID0gc2NhbGUoZXBpX2RlbW9faG93cl9udW0pKSAlPiUKICAgIHVuZ3JvdXAoKSwKICBjb250cmFzdHMgPSBsaXN0KGVwaV9jaGFyYyA9IGNvbnRyYXN0c19jaGFyY19kdW0pKQoKcl9wb3Jfc3BleF9wcm9wYWxsX2hvd3JfZ2ggPC0gbG0oCiAgcG9yX3Njb3JlX3N0ZCB+IHNwZXhfc2NvcmVfcHJvcGFsbF9zdGQgKiBlcGlfY2hhcmMgKiBlcGlfZGVtb19ob3dyX251bSwKICBkX3Bvcl9zcGV4X2Jhc2VfcTJ0bzIzX3Byb3BhbGwgJT4lCiAgICBmaWx0ZXIoZXBpX2N0cnkgPT0gIkdoYW5hIikgJT4lCiAgICBncm91cF9ieShlcGlfY3RyeSkgJT4lCiAgICBtdXRhdGUoZXBpX2RlbW9faG93cl9udW0gPSBzY2FsZShlcGlfZGVtb19ob3dyX251bSkpICU+JQogICAgdW5ncm91cCgpLAogIGNvbnRyYXN0cyA9IGxpc3QoZXBpX2NoYXJjID0gY29udHJhc3RzX2NoYXJjX2R1bSkpCgpyX3Bvcl9zcGV4X3Byb3BhbGxfaG93cl90aCA8LSBsbSgKICBwb3Jfc2NvcmVfc3RkIH4gc3BleF9zY29yZV9wcm9wYWxsX3N0ZCAqIGVwaV9jaGFyYyAqIGVwaV9kZW1vX2hvd3JfbnVtLAogIGRfcG9yX3NwZXhfYmFzZV9xMnRvMjNfcHJvcGFsbCAlPiUKICAgIGZpbHRlcihlcGlfY3RyeSA9PSAiQ2hpbmEiKSAlPiUKICAgIGdyb3VwX2J5KGVwaV9jdHJ5KSAlPiUKICAgIG11dGF0ZShlcGlfZGVtb19ob3dyX251bSA9IHNjYWxlKGVwaV9kZW1vX2hvd3JfbnVtKSkgJT4lCiAgICB1bmdyb3VwKCksCiAgY29udHJhc3RzID0gbGlzdChlcGlfY2hhcmMgPSBjb250cmFzdHNfY2hhcmNfZHVtKSkKCnJfcG9yX3NwZXhfcHJvcGFsbF9ob3dyX2NoIDwtIGxtKAogIHBvcl9zY29yZV9zdGQgfiBzcGV4X3Njb3JlX3Byb3BhbGxfc3RkICogZXBpX2NoYXJjICogZXBpX2RlbW9faG93cl9udW0sCiAgZF9wb3Jfc3BleF9iYXNlX3EydG8yM19wcm9wYWxsICU+JQogICAgZmlsdGVyKGVwaV9jdHJ5ID09ICJUaGFpbGFuZCIpICU+JQogICAgZ3JvdXBfYnkoZXBpX2N0cnkpICU+JQogICAgbXV0YXRlKGVwaV9kZW1vX2hvd3JfbnVtID0gc2NhbGUoZXBpX2RlbW9faG93cl9udW0pKSAlPiUKICAgIHVuZ3JvdXAoKSwKICBjb250cmFzdHMgPSBsaXN0KGVwaV9jaGFyYyA9IGNvbnRyYXN0c19jaGFyY19kdW0pKQoKcl9wb3Jfc3BleF9wcm9wYWxsX2hvd3JfdnQgPC0gbG0oCiAgcG9yX3Njb3JlX3N0ZCB+IHNwZXhfc2NvcmVfcHJvcGFsbF9zdGQgKiBlcGlfY2hhcmMgKiBlcGlfZGVtb19ob3dyX251bSwKICBkX3Bvcl9zcGV4X2Jhc2VfcTJ0bzIzX3Byb3BhbGwgJT4lCiAgICBmaWx0ZXIoZXBpX2N0cnkgPT0gIlZhbnVhdHUiKSAlPiUKICAgIGdyb3VwX2J5KGVwaV9jdHJ5KSAlPiUKICAgIG11dGF0ZShlcGlfZGVtb19ob3dyX251bSA9IHNjYWxlKGVwaV9kZW1vX2hvd3JfbnVtKSkgJT4lCiAgICB1bmdyb3VwKCksCiAgY29udHJhc3RzID0gbGlzdChlcGlfY2hhcmMgPSBjb250cmFzdHNfY2hhcmNfZHVtKSkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnJiaW5kKHN1bW1hcnkocl9wb3Jfc3BleF9wcm9wYWxsX2hvd3JfdXMpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJVUyIpLAogICAgICBzdW1tYXJ5KHJfcG9yX3NwZXhfcHJvcGFsbF9ob3dyX2doKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiR2hhbmEiKSwKICAgICAgc3VtbWFyeShyX3Bvcl9zcGV4X3Byb3BhbGxfaG93cl90aCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlRoYWlsYW5kIiksCiAgICAgIHN1bW1hcnkocl9wb3Jfc3BleF9wcm9wYWxsX2hvd3JfY2gpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJDaGluYSIpLAogICAgICBzdW1tYXJ5KHJfcG9yX3NwZXhfcHJvcGFsbF9ob3dyX3Z0KSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVmFudWF0dSIpKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtYyhwYXJhbWV0ZXIsIHAsIHNpdGUpKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBzZWxlY3QoLXNpdGUpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpLAogICAgICAgIGNhcHRpb24gPSAiUmVsYXRpb25zaGlwIGJldHdlZW4gcG9yb3NpdHkgYW5kIHNwaXJpdHVhbCBleHBlcmllbmNlLCBhY2NvdW50aW5nIGZvciByZWxpZ2lvc2l0eSwgd2l0aGluIGVhY2ggc2l0ZSBzZXBhcmF0ZWx5IFttb2RlbDogbG0ocG9yX3Njb3JlX3N0ZCB+IHNwZXhfc2NvcmVfcHJvcGFsbF9zdGQgKiBlcGlfY2hhcmMgKiBlcGlfZGVtb19ob3dfbnVtLCBkX3Bvcl9zcGV4X2Jhc2VfcTJ0bzIzX3Byb3BhbGwgJT4lIGZpbHRlcihlcGlfY3RyeSA9PSAuLi4pXSIpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICBncm91cF9yb3dzKCJVUyIsIDEsIDgpICU+JQogIGdyb3VwX3Jvd3MoIkdoYW5hIiwgOSwgMTYpICU+JQogIGdyb3VwX3Jvd3MoIlRoYWlsYW5kIiwgMTcsIDI0KSAlPiUKICBncm91cF9yb3dzKCJDaGluYSIsIDI1LCAzMikgJT4lCiAgZ3JvdXBfcm93cygiVmFudWF0dSIsIDMzLCA0MCkgJT4lCiAgcm93X3NwZWMoYyhzZXEoMiwgMzQsIDgpKSwgYm9sZCA9IFQpICU+JQogIHJvd19zcGVjKGMoc2VxKDQsIDM2LCA4KSksIGJvbGQgPSBUKSAlPiUKICByb3dfc3BlYyhjKHNlcSg2LCAzOCwgOCkpLCBib2xkID0gVCkKYGBgCgpUaGlzIGFuYWx5c2lzIHN1Z2dlc3RzIHRoYXQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIFBvcm9zaXR5IGFuZCBTcGlyaXR1YWwgRXhwZXJpZW5jZSBpcyBzaWduZmljYW50bHkgcG9zaXRpdmUgYW1vbmcgbm9uLWNoYXJpc21hdGljcyBpbiBhbGwgZml2ZSBzaXRlcyBjb25zaWRlcmVkIGluZGl2aWR1YWxseSwgX2V2ZW4gYWZ0ZXIgYWNjb3VudGluZyBmb3Igc2VsZi1yZXBvcnRlZCByZWxpZ2lvc2l0eV8uIFRoZSBpbXBhY3Qgb2YgcmVsaW9zaXR5IG9uIHRoZSBzdHJlbmd0aCBvZiB0aGlzIHJlbGF0aW9uc2hpcCBhcHBlYXJzIHRvIHZhcnkgYWNyb3NzIHNpdGVzICh0aG91Z2ggdGhlcmUncyBvbmx5IGxpbWl0ZWQgZXZpZGVuY2Ugb2YgdGhpcyBmcm9tIHRoZSBwcmV2aW91cyBhbmFseXNpcyk6IGl0J3Mgbm90IHNpZ25pZmljYW50IGluIHRoZSBVUywgVGhhaSwgb3IgbmktVmFuIHNhbXBsZXMgYWxvbmUsIGJ1dCBzaWduaWZpY2FudGx5IHdlYWtlciBhbW9uZyBtb3JlIHJlbGlnaW91cyBwYXJ0aWNpcGFudHMgaW4gR2hhbmEgYW5kIENoaW5hLiBJIHdvdWxkIHRha2UgdGhpcyB3aXRoIGEgYmlnIGdyYWluIG9mIHNhbHQuCgoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyBDb25zaWRlcmluZyBmaXJzdCBmaXZlICJiZWluZ3MiIGZvciBhbGwgc2l0ZXMKCmBgYHtyfQpkX3Bvcl9zcGV4X2Jhc2VfcTJ0bzIzX2ZpcnN0NSA8LSBkX3NwZXhfYmFzZV9xMnRvMjNfc2NvcmVkX2ZpcnN0NSAlPiUgCiAgcmVuYW1lKHNwZXhfc2NvcmVfZmlyc3Q1ID0gc2NvcmUpICU+JQogIGZ1bGxfam9pbihkX3Bvcl9zY29yZWQgJT4lIHJlbmFtZShwb3Jfc2NvcmUgPSBzY29yZSkpICU+JQogIGdyb3VwX2J5KGVwaV9jdHJ5KSAlPiUKICBtdXRhdGUocG9yX3Njb3JlX3N0ZCA9IHNjYWxlKHBvcl9zY29yZSksCiAgICAgICAgIHNwZXhfc2NvcmVfZmlyc3Q1X3N0ZCA9IHNjYWxlKHNwZXhfc2NvcmVfZmlyc3Q1KSkgJT4lCiAgdW5ncm91cCgpICU+JQogIG11dGF0ZShwb3Jfc2NvcmVfc3RkX2NvbGxhcHNlID0gc2NhbGUocG9yX3Njb3JlKSwKICAgICAgICAgc3BleF9zY29yZV9maXJzdDVfc3RkX2NvbGxhcHNlID0gc2NhbGUoc3BleF9zY29yZV9maXJzdDUpKQoKIyBlZmZlY3QtY29kZSBieSBkZWZhdWx0CmNvbnRyYXN0cyhkX3Bvcl9zcGV4X2Jhc2VfcTJ0bzIzX2ZpcnN0NSRlcGlfY3RyeSkgPC0gY29udHIuc3VtKDUpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjM1LCBpbmNsdWRlID0gRn0KZ2dwbG90KGRfcG9yX3NwZXhfYmFzZV9xMnRvMjNfZmlyc3Q1LAogICAgICAgYWVzKHggPSBwb3Jfc2NvcmUsIHkgPSBzcGV4X3Njb3JlX2ZpcnN0NSwgY29sb3IgPSBlcGlfY3RyeSkpICsKICBmYWNldF9ncmlkKH4gZXBpX2N0cnkpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC4yLCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBjb2xvciA9ICJibGFjayIsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMTYsIDQpKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCAyMiwgMikpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIlJlbGF0aW9uc2hpcCBiZXR3ZWVuIHBvcm9zaXR5IGFuZCBzcGlyaXR1YWwgZXhwZXJpZW5jZSIsCiAgICAgICBzdWJ0aXRsZSA9ICJJbmNsdWRlcyBmaXJzdCBmaXZlIGJlaW5ncyBmb3IgYWxsIHNpdGVzIiwKICAgICAgIHggPSAiUG9yb3NpdHkgc2NvcmUgKDAtMTYpIiwKICAgICAgIHkgPSAiU3Bpcml0dWFsIGV4cC4gc3VtIHNjb3JlICgwLTIyKSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjMsIGluY2x1ZGUgPSBUfQpnZ3Bsb3QoZF9wb3Jfc3BleF9iYXNlX3EydG8yM19maXJzdDUsCiAgICAgICBhZXMoeCA9IHBvcl9zY29yZV9zdGRfY29sbGFwc2UsIHkgPSBzcGV4X3Njb3JlX2ZpcnN0NV9zdGRfY29sbGFwc2UsIAogICAgICAgICAgIGNvbG9yID0gZXBpX2N0cnkpKSArCiAgZmFjZXRfd3JhcCh+IGVwaV9jdHJ5LCBuY29sID0gNSwgc2NhbGVzID0gImZyZWUiKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuMiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmxhY2siLCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC00LCA0LCAxKSkgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoLTQsIDQsIDEpKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgICBsYWJzKHRpdGxlID0gIlJlbGF0aW9uc2hpcCBiZXR3ZWVuIHBvcm9zaXR5IGFuZCBzcGlyaXR1YWwgZXhwZXJpZW5jZSIsCiAgICAgICBzdWJ0aXRsZSA9ICJJbmNsdWRlcyBmaXJzdCBmaXZlIGJlaW5ncyBmb3IgYWxsIHNpdGVzIiwKICAgICAgIHggPSAiUG9yb3NpdHkgc2NvcmUgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiLAogICAgICAgeSA9ICJTcGlyaXR1YWwgZXhwLiBzdW0gc2NvcmVcbihzdGQuIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIpCmBgYAoKQWdhaW4sIGl0IGlzIGNsZWFyIGZyb20gdGhlIHBsb3QgdGhhdCB0aGVyZSBpcyBhIGdlbmVyYWwgcmVsYXRpb25zaGlwIGJldHdlZW4gUG9yb3NpdHkgYW5kIFNwaXJpdHVhbCBFeHBlcmllbmNlIHNjb3JlcywgYW5kIHRoZSBzdHJlbmd0aCBvZiB0aGlzIHJlbGF0aW9uc2hpcHMgYXBwZWFycyB0byB2YXJ5IHNvbWV3aGF0IGFjcm9zcyBzaXRlcy4gCgpGaXJzdCwgSSdsbCBsb29rIGF0IHRoaXMgcmVsYXRpb25zaGlwIGNvbnNpZGVyaW5nIGFsbCBzaXRlcyBpbiB0aGUgc2FtZSBhbmFseXNpcyAoc3RhbmRhcmRpemluZyBzY29yZXMgY29sbGFwc2luZyBhY3Jvc3MgYWxsIHNpdGVzLCB0byBtYWludGFpbiB0aGUgcGF0dGVybiBmbyBnZW5lcmFsIGRpZmZlcmVuY2VzIGluIFBvcm9zaXR5IGFuZCBTcGlyaXR1YWwgRXhwZXJpZW5jZSBhY3Jvc3Mgc2l0ZXMpOgoKYGBge3J9CnJfcG9yX3NwZXhfZmlyc3Q1IDwtIGxtKHBvcl9zY29yZV9zdGRfY29sbGFwc2UgfiBzcGV4X3Njb3JlX2ZpcnN0NV9zdGRfY29sbGFwc2UgKiBlcGlfY3RyeSwKICAgICAgICAgICAgICAgICAgICAgICAgIGRfcG9yX3NwZXhfYmFzZV9xMnRvMjNfZmlyc3Q1LAogICAgICAgICAgICAgICAgICAgICAgICAgY29udHJhc3RzID0gbGlzdChlcGlfY3RyeSA9IGNvbnRyYXN0c19jdHJ5X2N0cikpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpzdW1tYXJ5KHJfcG9yX3NwZXhfZmlyc3Q1KSRjb2VmZmljaWVudHMgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgcmVuYW1lKGIgPSBFc3RpbWF0ZSwgYHN0YW5kYXJkIGVycm9yYCA9IFN0ZC4uRXJyb3IsIGB0YCA9IHQudmFsdWUsCiAgICAgICAgIHAgPSBQci4uLnQuLikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoLXBhcmFtZXRlciwgLXApLCBmdW5zKHJvdW5kKC4sIDIpKSkgJT4lCiAgbXV0YXRlKHAgPSBpZmVsc2UocCA8IDAuMDAxLCAiPDAuMDAxIiwgcm91bmQocCwgMykpLAogICAgICAgICBzaWduaWZpY2FudCA9IGlmZWxzZShwIDwgMC4wNSwgIioiLCAiIikpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpLAogICAgICAgIGNhcHRpb24gPSAiUmVsYXRpb25zaGlwIGJldHdlZW4gcG9yb3NpdHkgYW5kIHNwaXJpdHVhbCBleHBlcmllbmNlLCBjb21wYXJpbmcgYWNyb3NzIHNpdGVzIFttb2RlbDogbG0ocG9yX3Njb3JlX3N0ZF9jb2xsYXBzZSB+IHNwZXhfc2NvcmVfZmlyc3Q1X3N0ZF9jb2xsYXBzZSAqIGVwaV9jdHJ5LCBkX3Bvcl9zcGV4X2Jhc2VfcTJ0bzIzX2ZpcnN0NSldIikgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIHJvd19zcGVjKGMoMiwgNzoxMCksIGJvbGQgPSBUKQpgYGAKClRoaXMgYW5hbHlzaXMgaXMgdmlydHVhbGx5IGlkZW50aWNhbCB0byB0aGUgcGFyYWxsZWwgYW5hbHlzaXMgdXNpbmcgcHJvcG9ydGlvbiBzY29yZXMsIGFib3Zl4oCUd2l0aCB0aGUgYWRkaXRpb25hbCBzdWdnZXN0aW9uIHRoYXQgdGhlIHJlbGF0aW9uc2hpcCB3YXMgc2lnbmlmaWNhbnRseSB3ZWFrZXIgYW1vbmcgcGFydGljaXBhbnRzIGluIFRoYWlsYW5kIHRoYW4gcGFydGljaXBhbnRzIGluIENoaW5hIChzZWUgInNwZXhfc2NvcmVfZmlyc3Q1X3N0ZDplcGlfY3RyeVRIX0NIIiByb3cgaW4gdGFibGUgYWJvdmUpLgoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjMsIGluY2x1ZGUgPSBUfQpnZ3Bsb3QoZF9wb3Jfc3BleF9iYXNlX3EydG8yM19maXJzdDUsCiAgICAgICBhZXMoeCA9IHBvcl9zY29yZV9zdGQsIHkgPSBzcGV4X3Njb3JlX2ZpcnN0NV9zdGQsIGNvbG9yID0gZXBpX2N0cnkpKSArCiAgZmFjZXRfd3JhcCh+IGVwaV9jdHJ5LCBuY29sID0gNSwgc2NhbGVzID0gImZyZWUiKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuMiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmxhY2siLCBzaG93LmxlZ2VuZCA9IEYpICsKICAjIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMTYsIDQpKSArCiAgIyBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDIyLCA0KSkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogICAgbGFicyh0aXRsZSA9ICJSZWxhdGlvbnNoaXAgYmV0d2VlbiBwb3Jvc2l0eSBhbmQgc3Bpcml0dWFsIGV4cGVyaWVuY2UiLAogICAgICAgc3VidGl0bGUgPSAiSW5jbHVkZXMgZmlyc3QgZml2ZSBiZWluZ3MgZm9yIGFsbCBzaXRlcyIsCiAgICAgICB4ID0gIlBvcm9zaXR5IHNjb3JlIChzdGFuZGFyZGl6ZWQgd2l0aGluIGVhY2ggc2l0ZSkiLAogICAgICAgeSA9ICJTcGlyaXR1YWwgZXhwLiBzdW0gc2NvcmVcbihzdGFuZGFyZGl6ZWQgd2l0aGluIGVhY2ggc2l0ZSkiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC4zNSwgaW5jbHVkZSA9IEZ9CmdncGxvdChkX3Bvcl9zcGV4X2Jhc2VfcTJ0bzIzX2ZpcnN0NSAlPiUKICAgICAgICAgZmlsdGVyKGFicyhwb3Jfc2NvcmVfc3RkKSA8IDIsCiAgICAgICAgICAgICAgICBhYnMoc3BleF9zY29yZV9maXJzdDVfc3RkKSA8IDIpLAogICAgICAgYWVzKHggPSBwb3Jfc2NvcmVfc3RkLCB5ID0gc3BleF9zY29yZV9maXJzdDVfc3RkLCBjb2xvciA9IGVwaV9jdHJ5KSkgKwogIGZhY2V0X3dyYXAofiBlcGlfY3RyeSwgbmNvbCA9IDUpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC4yLCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBjb2xvciA9ICJibGFjayIsIHNob3cubGVnZW5kID0gRikgKwogICMgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCAxNiwgNCkpICsKICAjIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMjIsIDQpKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJSZWxhdGlvbnNoaXAgYmV0d2VlbiBwb3Jvc2l0eSBhbmQgc3Bpcml0dWFsIGV4cGVyaWVuY2UiLAogICAgICAgc3VidGl0bGUgPSAiSW5jbHVkZXMgZmlyc3QgZml2ZSBiZWluZ3MgZm9yIGFsbCBzaXRlc1xuRXhjbHVkaW5nIG91dGxpZXJzICh6ID4gMiBvciB6IDwgLTIpIiwKICAgICAgIHggPSAiUG9yb3NpdHkgc2NvcmUgKHN0YW5kYXJkaXplZCB3aXRoaW4gZWFjaCBzaXRlKSIsCiAgICAgICB5ID0gIlNwaXJpdHVhbCBleHAuIHN1bSBzY29yZVxuKHN0YW5kYXJkaXplZCB3aXRoaW4gZWFjaCBzaXRlKSIpCmBgYAoKTmV4dCwgSSdsbCBsb29rIGF0IHRoaXMgcmVsYXRpb25zaGlwIGNvbnNpZGVyaW5nIGVhY2ggc2l0ZXMgaW5kaXZpZHVhbGx5IGluIGl0cyBvd24gYW5hbHlzaXMgKHN0YW5kYXJkaXppbmcgc2NvcmVzIHdpdGhpbiBlYWNoIHNpdGUpOgoKYGBge3J9CnJfcG9yX3NwZXhfZmlyc3Q1X3VzIDwtIGxtKHBvcl9zY29yZV9zdGQgfiBzcGV4X3Njb3JlX2ZpcnN0NV9zdGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRfcG9yX3NwZXhfYmFzZV9xMnRvMjNfZmlyc3Q1ICU+JQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihlcGlfY3RyeSA9PSAiVVMiKSkKCnJfcG9yX3NwZXhfZmlyc3Q1X2doIDwtIGxtKHBvcl9zY29yZV9zdGQgfiBzcGV4X3Njb3JlX2ZpcnN0NV9zdGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRfcG9yX3NwZXhfYmFzZV9xMnRvMjNfZmlyc3Q1ICU+JQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihlcGlfY3RyeSA9PSAiR2hhbmEiKSkKCnJfcG9yX3NwZXhfZmlyc3Q1X3RoIDwtIGxtKHBvcl9zY29yZV9zdGQgfiBzcGV4X3Njb3JlX2ZpcnN0NV9zdGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRfcG9yX3NwZXhfYmFzZV9xMnRvMjNfZmlyc3Q1ICU+JQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihlcGlfY3RyeSA9PSAiVGhhaWxhbmQiKSkKCnJfcG9yX3NwZXhfZmlyc3Q1X2NoIDwtIGxtKHBvcl9zY29yZV9zdGQgfiBzcGV4X3Njb3JlX2ZpcnN0NV9zdGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRfcG9yX3NwZXhfYmFzZV9xMnRvMjNfZmlyc3Q1ICU+JQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihlcGlfY3RyeSA9PSAiQ2hpbmEiKSkKCnJfcG9yX3NwZXhfZmlyc3Q1X3Z0IDwtIGxtKHBvcl9zY29yZV9zdGQgfiBzcGV4X3Njb3JlX2ZpcnN0NV9zdGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRfcG9yX3NwZXhfYmFzZV9xMnRvMjNfZmlyc3Q1ICU+JQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihlcGlfY3RyeSA9PSAiVmFudWF0dSIpKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0KcmJpbmQoc3VtbWFyeShyX3Bvcl9zcGV4X2ZpcnN0NV91cykkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlVTIiksCiAgICAgIHN1bW1hcnkocl9wb3Jfc3BleF9maXJzdDVfZ2gpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJHaGFuYSIpLAogICAgICBzdW1tYXJ5KHJfcG9yX3NwZXhfZmlyc3Q1X3RoKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVGhhaWxhbmQiKSwKICAgICAgc3VtbWFyeShyX3Bvcl9zcGV4X2ZpcnN0NV9jaCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIkNoaW5hIiksCiAgICAgIHN1bW1hcnkocl9wb3Jfc3BleF9maXJzdDVfdnQpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJWYW51YXR1IikpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1jKHBhcmFtZXRlciwgcCwgc2l0ZSkpLCBmdW5zKHJvdW5kKC4sIDIpKSkgJT4lCiAgbXV0YXRlKHAgPSBpZmVsc2UocCA8IDAuMDAxLCAiPDAuMDAxIiwgcm91bmQocCwgMykpLAogICAgICAgICBzaWduaWZpY2FudCA9IGlmZWxzZShwIDwgMC4wNSwgIioiLCAiIikpICU+JQogIHNlbGVjdCgtc2l0ZSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIiksCiAgICAgICAgY2FwdGlvbiA9ICJSZWxhdGlvbnNoaXAgYmV0d2VlbiBwb3Jvc2l0eSBhbmQgc3Bpcml0dWFsIGV4cGVyaWVuY2UsIHdpdGhpbiBlYWNoIHNpdGUgc2VwYXJhdGVseSBbbW9kZWw6IGxtKHBvcl9zY29yZV9zdGQgfiBzcGV4X3Njb3JlX2ZpcnN0NV9zdGQsIGRfcG9yX3NwZXhfYmFzZV9xMnRvMjNfZmlyc3Q1ICU+JSBmaWx0ZXIoZXBpX2N0cnkgPT0gLi4uKV0iKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgZ3JvdXBfcm93cygiVVMiLCAxLCAyKSAlPiUKICBncm91cF9yb3dzKCJHaGFuYSIsIDMsIDQpICU+JQogIGdyb3VwX3Jvd3MoIlRoYWlsYW5kIiwgNSwgNikgJT4lCiAgZ3JvdXBfcm93cygiQ2hpbmEiLCA3LCA4KSAlPiUKICBncm91cF9yb3dzKCJWYW51YXR1IiwgOSwgMTApICU+JQogIHJvd19zcGVjKGMoc2VxKDIsIDEwLCAyKSksIGJvbGQgPSBUKQpgYGAKCkFzIHdpdGggdGhlIGFuYWx5c2lzIG9mIHByb3BvcnRpb24gc2NvcmVzLCB0aGlzIGFuYWx5c2lzIHN1Z2dlc3RzIHRoYXQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIFBvcm9zaXR5IGFuZCBTcGlyaXR1YWwgRXhwZXJpZW5jZSBpcyBzaWduZmljYW50bHkgcG9zaXRpdmUgaW4gYWxsIGZpdmUgc2l0ZXMgY29uc2lkZXJlZCBpbmRpdmlkdWFsbHksIGFuZCB0aGUgcmVncmVzc2lvbiBjb2VmZmljaWVudHMgKCJiIiBjb2x1bW4gaW4gdGhlIHRhYmxlIGFib3ZlKSBmdXJ0aGVyIGNvbmZpcm0gdGhhdCB0aGlzIHJlbGF0aW9uaGlwIHdhcyBzdHJvbmdlc3QgaW4gQ2hpbmEgYW5kIHRoZSBVUywgbWlkZGxpbmcgaW4gVmFudWF0dSBhbmQgVGhhaWxhbmQsIGFuZCB3ZWFrZXN0IChidXQgc3RpbGwgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSkgaW4gR2hhbmEuCgpfX1NpbmNlIHRoaXMgYW5hbHlzaXMgd2FzIHNvIHNpbWlsYXIgdG8gdGhlIGFuYWx5c2lzIGNvbnNpZGVyaW5nIGFsbCBiZWluZ3MsIEkgd2lsbCBub3QgYm90aGVyIGJyZWFraW5nIHRoaW5ncyBkb3duIGJ5IGNoYXJpc21hdGljIHN0YXR1cyBhdCB0aGlzIHBvaW50Ll9fCgoKIyBTcGlyaXR1YWwgZXhwZXJpZW5jZSBmb2xsb3ctdXAgcXVlc3Rpb25zCgojIyBGcmVxdWVuY3kgcXVlc3Rpb25zICgiSG93IG9mdGVuLi4uPyIpCgojIyMgUXVlc3Rpb25zICMyLTEwCgpgYGB7ciwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDF9CmRfc3BleF9mdSAlPiUKICBmaWx0ZXIoZ3JlcGwoIm9mdGVuIiwgcXVlc3Rpb25fdGV4dCkpICU+JQogIG11dGF0ZShxdWVzdGlvbl9iYXNlID0gZ3N1YigiLiQiLCAiIiwgYXMuY2hhcmFjdGVyKHF1ZXN0aW9uKSkpICU+JQogIGZpbHRlcihxdWVzdGlvbl9iYXNlICVpbiUgCiAgICAgICAgICAgYygiZXBpXzJfMDIiLCAiZXBpXzJfMDMiLCAiZXBpXzJfMDQiLCAiZXBpXzJfMDUiLCAiZXBpXzJfMDYiLCAKICAgICAgICAgICAgICJlcGlfMl8wNyIsICJlcGlfMl8wOCIsICJlcGlfMl8wOSIsICJlcGlfMl8xMCIpKSAlPiUKICBzZWxlY3QoLW9yZGVyKSAlPiUKICBsZWZ0X2pvaW4oZF9zcGV4ICU+JSBkaXN0aW5jdChxdWVzdGlvbiwgb3JkZXIsIHF1ZXN0aW9uX3RleHQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVwaV9jdHJ5LCBlcGlfc3ViaiwgcmVzcG9uc2UpICU+JQogICAgICAgICAgICAgIHJlbmFtZShxdWVzdGlvbl9iYXNlID0gcXVlc3Rpb24sCiAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uX3RleHRfYmFzZSA9IHF1ZXN0aW9uX3RleHQsCiAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlX2Jhc2UgPSByZXNwb25zZSkpICU+JQogIGRpc3RpbmN0KCkgJT4lCiAgbXV0YXRlKGZhY2V0ID0gcGFzdGUwKCJbIiwgcXVlc3Rpb25fdGV4dF9iYXNlLCAiXVxuIiwgcXVlc3Rpb25fdGV4dCksCiAgICAgICAgIGZhY2V0ID0gc3RyX3dyYXAoZmFjZXQsIHdpZHRoID0gNjcpLAogICAgICAgICByZXNwb25zZV93aXRoX25hID0gaWZlbHNlKHJlc3BvbnNlX2Jhc2UgPT0gMCwgMCwgcmVzcG9uc2UpKSAlPiUKICBmaWx0ZXIoIWlzLm5hKHJlc3BvbnNlX3dpdGhfbmEpLCAhaXMubmEoZXBpX2NoYXJjKSkgJT4lCiAgZ3JvdXBfYnkoZmFjZXQsIGVwaV9jdHJ5LCBlcGlfY2hhcmMpICU+JQogIG11dGF0ZShuID0gbigpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gZXBpX2N0cnksCiAgICAgICAgICAgICAjIHkgPSByZXNwb25zZSwgCiAgICAgICAgICAgICB5ID0gcmVzcG9uc2Vfd2l0aF9uYSwKICAgICAgICAgICAgIGNvbG9yID0gZXBpX2N0cnksIHNoYXBlID0gZXBpX2NoYXJjKSkgKwogIGZhY2V0X3dyYXAofmZhY2V0KSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuMiwgc2hvdy5sZWdlbmQgPSBGLAogICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9qaXR0ZXJkb2RnZShqaXR0ZXIud2lkdGggPSBqaXR0ZXJfd2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXR0ZXIuaGVpZ2h0ID0gMC4yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2RnZS53aWR0aCA9IGRvZGdlX3dpZCkpICsKICBnZW9tX3BvaW50cmFuZ2UoZGF0YSA9IC4gJT4lIAogICAgICAgICAgICAgICAgICAgIGdyb3VwX2J5KGVwaV9jdHJ5LCBlcGlfY2hhcmMsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uX2Jhc2UsIHF1ZXN0aW9uX3RleHRfYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbl90ZXh0LCBmYWNldCwgb3JkZXIpICU+JQogICAgICAgICAgICAgICAgICAgICMgbXVsdGlfYm9vdF9zdGFuZGFyZCgicmVzcG9uc2UiLCBuYS5ybSA9IFQpICU+JQogICAgICAgICAgICAgICAgICAgIG11bHRpX2Jvb3Rfc3RhbmRhcmQoInJlc3BvbnNlX3dpdGhfbmEiLCBuYS5ybSA9IFQpICU+JQogICAgICAgICAgICAgICAgICAgIHVuZ3JvdXAoKSwKICAgICAgICAgICAgICAgICAgYWVzKHkgPSBtZWFuLCB5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgZmF0dGVuID0gMiwgc2hvdy5sZWdlbmQgPSBULAogICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gZG9kZ2Vfd2lkKSkgKwogIGdlb21fdGV4dChkYXRhID0gLiAlPiUgZGlzdGluY3QoZXBpX2N0cnksIGVwaV9jaGFyYywgZmFjZXQsIG4pLAogICAgICAgICAgICBhZXMobGFiZWwgPSBwYXN0ZTAoIm49IiwgbiksIHkgPSA0LjUpLAogICAgICAgICAgICBzaXplID0gMiwgY29sb3IgPSAiYmxhY2siLAogICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gZG9kZ2Vfd2lkKSkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIiwgZ3VpZGUgPSAibm9uZSIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDUsIDEpKSArCiAgc2NhbGVfc2hhcGVfbWFudWFsKCJDaGFyaXNtYXRpYyBzdGF0dXMiLCB2YWx1ZXMgPSBjKDE5LCA4KSkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSArCiAgbGFicyh0aXRsZSA9ICJTcGlyaXR1YWwgZXhwZXJpZW5jZXMgKFF1ZXN0aW9ucyAjMi0yMyk6IFJlc3BvbnNlcyB0byBmcmVxdWVuY3kgcXVlc3Rpb25zIiwKICAgICAgIHN1YnRpdGxlID0gIjAgPSBOZXZlciBPUiByZXNwb25zZSBvZiAnbm8nIG9uIGJhc2UgcXVlc3Rpb25cbjEgPSBPbmNlIG9yIHR3aWNlXG4yID0gQXQgbGVhc3Qgb25jZSBhIHllYXJcbjMgPSBBdCBsZWFzdCBvbmNlIGEgbW9udGhcbjQgPSBBdCBsZWFzdCBvbmNlIGEgd2Vla1xuNSA9IEV2ZW4gbW9yZVxuRXJyb3IgYmFycyBhcmUgYm9vdHN0cmFwcGVkIDk1JSBDSXMiLAogICAgICAgeCA9ICJTaXRlIiwgeSA9ICJSZXNwb25zZSIpCmBgYAoKIyMjIFF1ZXN0aW9ucyAjMTEtMTUgKCsgbW9yZSBmb3IgVGhhaWxhbmQpCgpgYGB7cn0KZF9zcGV4X3ExMXRvMTVfcGxvdHRpbmcgPC0gZF9zcGV4X2Z1ICU+JQogIGZpbHRlcihncmVwbCgib2Z0ZW4iLCBxdWVzdGlvbl90ZXh0KSkgJT4lCiAgbXV0YXRlKHF1ZXN0aW9uX2Jhc2UgPSBnc3ViKCIuJCIsICIiLCBhcy5jaGFyYWN0ZXIocXVlc3Rpb24pKSwKICAgICAgICAgcXVlc3Rpb25fYmFzZSA9IGlmZWxzZShncmVwbCgiXyQiLCBxdWVzdGlvbl9iYXNlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc3ViKCIuLiQiLCAiIiwgcXVlc3Rpb25fYmFzZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25fYmFzZSkpICU+JQogIGZpbHRlcihncmVwbCgiMTEiLCBxdWVzdGlvbl9iYXNlKSB8IGdyZXBsKCIxMiIsIHF1ZXN0aW9uX2Jhc2UpIHwKICAgICAgICAgICBncmVwbCgiMTMiLCBxdWVzdGlvbl9iYXNlKSB8IGdyZXBsKCIxNCIsIHF1ZXN0aW9uX2Jhc2UpIHwKICAgICAgICAgICBncmVwbCgiMTUiLCBxdWVzdGlvbl9iYXNlKSkgJT4lCiAgc2VsZWN0KC1vcmRlcikgJT4lCiAgbGVmdF9qb2luKGRfc3BleF9iYXNlX3ExMXRvMTUgJT4lIAogICAgICAgICAgICAgIGRpc3RpbmN0KHF1ZXN0aW9uLCBvcmRlciwgcXVlc3Rpb25fdGV4dCwgCiAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25fdW5pdjAsIHF1ZXN0aW9uX3VuaXYxLCBxdWVzdGlvbl91bml2MiwKICAgICAgICAgICAgICAgICAgICAgICBlcGlfY3RyeSwgZXBpX3N1YmosIHJlc3BvbnNlKSAlPiUKICAgICAgICAgICAgICByZW5hbWUocXVlc3Rpb25fYmFzZSA9IHF1ZXN0aW9uLAogICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbl90ZXh0X2Jhc2UgPSBxdWVzdGlvbl90ZXh0LAogICAgICAgICAgICAgICAgICAgICByZXNwb25zZV9iYXNlID0gcmVzcG9uc2UpKSAlPiUKICBkaXN0aW5jdCgpICU+JQogIG11dGF0ZShmYWNldCA9IHBhc3RlMCgiWyIsIHF1ZXN0aW9uX3RleHRfYmFzZSwgIl1cbiIsIHF1ZXN0aW9uX3RleHQpLAogICAgICAgICByZXNwb25zZV93aXRoX25hID0gaWZlbHNlKGlzLm5hKHJlc3BvbnNlKSwgcmVzcG9uc2VfYmFzZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UpKSAlPiUKICBmaWx0ZXIoIWlzLm5hKHJlc3BvbnNlX3dpdGhfbmEpLCAhaXMubmEoZXBpX2NoYXJjKSkgJT4lCiAgZ3JvdXBfYnkoZmFjZXQsIGVwaV9jdHJ5LCBlcGlfY2hhcmMpICU+JQogIG11dGF0ZShuID0gbigpKSAlPiUKICB1bmdyb3VwKCkKYGBgCgpgYGB7cn0KZF9zcGV4X3ExMXRvMTVfcGxvdF9mdW4gPC0gZnVuY3Rpb24oc2l0ZSwgaGxpbmUgPSBGLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGVfZmFjZXQgPSBUKXsKICAKICBjb2wgPC0gY2FzZV93aGVuKHNpdGUgPT0gIlVTIiB+ICIjMWI5ZTc3IiwKICAgICAgICAgICAgICAgICAgIHNpdGUgPT0gIkdoYW5hIiB+ICIjZDk1ZjAyIiwKICAgICAgICAgICAgICAgICAgIHNpdGUgPT0gIlRoYWlsYW5kIiB+ICIjNzU3MGIzIiwKICAgICAgICAgICAgICAgICAgIHNpdGUgPT0gIkNoaW5hIiB+ICIjZTcyOThhIiwKICAgICAgICAgICAgICAgICAgIHNpdGUgPT0gIlZhbnVhdHUiIH4gIiM2NmE2MWUiKQogIAogIHBsb3QgPC0gZF9zcGV4X3ExMXRvMTVfcGxvdHRpbmcgJT4lCiAgICBmaWx0ZXIoZXBpX2N0cnkgPT0gc2l0ZSwKICAgICAgICAgICAhZ3JlcGwoIkhvdyBvZnRlbiBkaWQgeW91OiAiLCBxdWVzdGlvbl90ZXh0KSkgJT4lCiAgICBtdXRhdGUoZmFjZXQgPSBzdHJfd3JhcChmYWNldCwgd2lkdGggPSAzNSksCiAgICAgICAgICAgcXVlc3Rpb25fdW5pdjIgPSB0b3VwcGVyKGFzLmNoYXJhY3RlcihxdWVzdGlvbl91bml2MikpKSAlPiUKICAgIGdncGxvdChhZXMoeCA9IGVwaV9jaGFyYywKICAgICAgICAgICAgICAgIyB5ID0gcmVzcG9uc2UsIAogICAgICAgICAgICAgICB5ID0gcmVzcG9uc2Vfd2l0aF9uYSwKICAgICAgICAgICAgICAgIyBjb2xvciA9IGVwaV9jdHJ5LCAKICAgICAgICAgICAgICAgc2hhcGUgPSBlcGlfY2hhcmMpKQogIAogIGlmKGRvdWJsZV9mYWNldCA9PSBUKXsKICAgIHBsb3QgPC0gcGxvdCArIAogICAgICBmYWNldF93cmFwKC4gfiBxdWVzdGlvbl91bml2MiB+IGZhY2V0LCBuY29sID0gNSkKICB9IGVsc2UgewogICAgcGxvdCA8LSBwbG90ICsKICAgICAgICAgIGZhY2V0X3dyYXAoLiB+IGZhY2V0LCBuY29sID0gNSkKICB9CiAgCiAgaWYoaGxpbmUgIT0gRil7CiAgICBwbG90IDwtIHBsb3QgKyAKICAgICAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gaGxpbmUsIGx0eSA9IDIpCiAgfQogIAogIHBsb3QgPC0gcGxvdCArCiAgICBnZW9tX3BvaW50KGFscGhhID0gMC4yLCBjb2xvciA9IGNvbCwgc2hvdy5sZWdlbmQgPSBGLAogICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2ppdHRlcmRvZGdlKGppdHRlci53aWR0aCA9IGppdHRlcl93aWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0dGVyLmhlaWdodCA9IDAuMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2RnZS53aWR0aCA9IGRvZGdlX3dpZCkpICsKICAgIGdlb21fcG9pbnRyYW5nZShkYXRhID0gLiAlPiUgCiAgICAgICAgICAgICAgICAgICAgICBncm91cF9ieShlcGlfY3RyeSwgZXBpX2NoYXJjLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uX2Jhc2UsIHF1ZXN0aW9uX3RleHRfYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uX3RleHQsIHF1ZXN0aW9uX3VuaXYyLCBmYWNldCwgb3JkZXIpICU+JQogICAgICAgICAgICAgICAgICAgICAgIyBtdWx0aV9ib290X3N0YW5kYXJkKCJyZXNwb25zZSIsIG5hLnJtID0gVCkgJT4lCiAgICAgICAgICAgICAgICAgICAgICBtdWx0aV9ib290X3N0YW5kYXJkKCJyZXNwb25zZV93aXRoX25hIiwgbmEucm0gPSBUKSAlPiUKICAgICAgICAgICAgICAgICAgICAgIHVuZ3JvdXAoKSwKICAgICAgICAgICAgICAgICAgICBhZXMoeSA9IG1lYW4sIHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSwKICAgICAgICAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIGZhdHRlbiA9IDIsIHNob3cubGVnZW5kID0gRiwKICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gZG9kZ2Vfd2lkKSkgKwogICAgZ2VvbV90ZXh0KGRhdGEgPSAuICU+JSBkaXN0aW5jdChlcGlfY3RyeSwgZXBpX2NoYXJjLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25fdW5pdjIsIGZhY2V0LCBuKSwKICAgICAgICAgICAgICBhZXMobGFiZWwgPSBwYXN0ZTAoIm49IiwgbiksIHkgPSA0LjUpLAogICAgICAgICAgICAgIHNpemUgPSAyLjUsIGNvbG9yID0gImJsYWNrIiwKICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gZG9kZ2Vfd2lkKSkgKwogICAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiLCBndWlkZSA9ICJub25lIikgKwogICAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCA1LCAxKSwKICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKHN0cl93cmFwKCJOZXZlciBPUiAnbm8nIG9uIGJhc2UgcXVlc3Rpb24iLCA4KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cl93cmFwKCJPbmNlIG9yIHR3aWNlIiwgOCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJfd3JhcCgiQXQgbGVhc3Qgb25jZSBhIHllYXIiLCA4KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cl93cmFwKCJBdCBsZWFzdCBvbmNlIGEgbW9udGgiLCA4KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cl93cmFwKCJBdCBsZWFzdCBvbmNlIGEgd2VlayIsIDgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyX3dyYXAoIkV2ZW4gbW9yZSIsIDgpKSkgKwogICAgc2NhbGVfc2hhcGVfbWFudWFsKCJDaGFyaXNtYXRpYyBzdGF0dXMiLCB2YWx1ZXMgPSBjKDE5LCA4KSkgKwogICAgbGFicyh0aXRsZSA9IHBhc3RlKHRvdXBwZXIoc2l0ZSksICJTcGlyaXR1YWwgZXhwZXJpZW5jZXMgKFF1ZXN0aW9ucyAjMTEtMTUpOiBSZXNwb25zZXMgdG8gZnJlcXVlbmN5IHF1ZXN0aW9ucyIpLAogICAgICAgICBzdWJ0aXRsZSA9ICJFcnJvciBiYXJzIGFyZSBib290c3RyYXBwZWQgOTUlIENJcyIsCiAgICAgICAgIHggPSAiQ2hhcmlzbWF0aWMgc3RhdHVzIiwgeSA9ICJSZXNwb25zZSIpCiAgCiAgcmV0dXJuKHBsb3QpCn0gCmBgYAoKYGBge3J9CmRfc3BleF9xMTF0bzE1X3Bsb3RfdXMgPC0gZF9zcGV4X3ExMXRvMTVfcGxvdF9mdW4oIlVTIiwgMSkKZF9zcGV4X3ExMXRvMTVfcGxvdF9naCA8LSBkX3NwZXhfcTExdG8xNV9wbG90X2Z1bigiR2hhbmEiLCAxKQojIGRfc3BleF9xMTF0bzE1X3Bsb3RfdGggPC0gZF9zcGV4X3ExMXRvMTVfcGxvdF9mdW4oIlRoYWlsYW5kIiwgMSkgIyB0aGVzZSBxdWVzdGlvbnMgYXJlIG1pc3NpbmcgZm9yIFRoYWlsYW5kCmRfc3BleF9xMTF0bzE1X3Bsb3RfY2ggPC0gZF9zcGV4X3ExMXRvMTVfcGxvdF9mdW4oIkNoaW5hIiwgMSkKZF9zcGV4X3ExMXRvMTVfcGxvdF92dCA8LSBkX3NwZXhfcTExdG8xNV9wbG90X2Z1bigiVmFudWF0dSIsIDEpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDYsIGZpZy5hc3AgPSAxLjgsIGluY2x1ZGUgPSBUfQpwbG90X2dyaWQoZF9zcGV4X3ExMXRvMTVfcGxvdF91cywgZF9zcGV4X3ExMXRvMTVfcGxvdF9naCwKICAgICAgICAgIGRfc3BleF9xMTF0bzE1X3Bsb3RfY2gsIGRfc3BleF9xMTF0bzE1X3Bsb3RfdnQsIG5jb2wgPSAxKQpgYGAKCmBgYHtyfQpkX3NwZXhfcTExdG8xNV9wbG90X2Z1bjIgPC0gZnVuY3Rpb24oc2l0ZSwgaGxpbmUgPSBGLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlX2ZhY2V0ID0gVCl7CiAgCiAgY29sIDwtIGNhc2Vfd2hlbihzaXRlID09ICJVUyIgfiAiIzFiOWU3NyIsCiAgICAgICAgICAgICAgICAgICBzaXRlID09ICJHaGFuYSIgfiAiI2Q5NWYwMiIsCiAgICAgICAgICAgICAgICAgICBzaXRlID09ICJUaGFpbGFuZCIgfiAiIzc1NzBiMyIsCiAgICAgICAgICAgICAgICAgICBzaXRlID09ICJDaGluYSIgfiAiI2U3Mjk4YSIsCiAgICAgICAgICAgICAgICAgICBzaXRlID09ICJWYW51YXR1IiB+ICIjNjZhNjFlIikKICAKICBwbG90IDwtIGRfc3BleF9xMTF0bzE1X3Bsb3R0aW5nICU+JQogICAgZmlsdGVyKGVwaV9jdHJ5ID09IHNpdGUsCiAgICAgICAgICAgZ3JlcGwoIkhvdyBvZnRlbiBkaWQgeW91OiAiLCBxdWVzdGlvbl90ZXh0KSkgJT4lCiAgICBtdXRhdGUoZmFjZXQgPSBzdHJfd3JhcChmYWNldCwgd2lkdGggPSAyMCksCiAgICAgICAgICAgcXVlc3Rpb25fdGV4dCA9IHN0cl93cmFwKHF1ZXN0aW9uX3RleHQsIHdpZHRoID0gMjUpLAogICAgICAgICAgIHF1ZXN0aW9uX3VuaXYyID0gdG91cHBlcihhcy5jaGFyYWN0ZXIocXVlc3Rpb25fdW5pdjIpKSkgJT4lCiAgICBnZ3Bsb3QoYWVzKHggPSBlcGlfY2hhcmMsCiAgICAgICAgICAgICAgICMgeSA9IHJlc3BvbnNlLCAKICAgICAgICAgICAgICAgeSA9IHJlc3BvbnNlX3dpdGhfbmEsCiAgICAgICAgICAgICAgICMgY29sb3IgPSBlcGlfY3RyeSwgCiAgICAgICAgICAgICAgIHNoYXBlID0gZXBpX2NoYXJjKSkKICAKICBpZihkb3VibGVfZmFjZXQgPT0gVCl7CiAgICBwbG90IDwtIHBsb3QgKyAKICAgICAgZmFjZXRfd3JhcCguIH4gcXVlc3Rpb25fdW5pdjIgfiBxdWVzdGlvbl90ZXh0LCBuY29sID0gNykKICB9IGVsc2UgewogICAgcGxvdCA8LSBwbG90ICsKICAgICAgICAgIGZhY2V0X3dyYXAoLiB+IHF1ZXN0aW9uX3RleHQsIG5jb2wgPSA1KQogIH0KICAKICBpZihobGluZSAhPSBGKXsKICAgIHBsb3QgPC0gcGxvdCArIAogICAgICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSBobGluZSwgbHR5ID0gMikKICB9CiAgCiAgcGxvdCA8LSBwbG90ICsKICAgIGdlb21fcG9pbnQoYWxwaGEgPSAwLjIsIGNvbG9yID0gY29sLCBzaG93LmxlZ2VuZCA9IEYsCiAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25faml0dGVyZG9kZ2Uoaml0dGVyLndpZHRoID0gaml0dGVyX3dpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXR0ZXIuaGVpZ2h0ID0gMC4yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvZGdlLndpZHRoID0gZG9kZ2Vfd2lkKSkgKwogICAgZ2VvbV9wb2ludHJhbmdlKGRhdGEgPSAuICU+JSAKICAgICAgICAgICAgICAgICAgICAgIGdyb3VwX2J5KGVwaV9jdHJ5LCBlcGlfY2hhcmMsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25fYmFzZSwgcXVlc3Rpb25fdGV4dF9iYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25fdGV4dCwgcXVlc3Rpb25fdW5pdjIsIGZhY2V0LCBvcmRlcikgJT4lCiAgICAgICAgICAgICAgICAgICAgICAjIG11bHRpX2Jvb3Rfc3RhbmRhcmQoInJlc3BvbnNlIiwgbmEucm0gPSBUKSAlPiUKICAgICAgICAgICAgICAgICAgICAgIG11bHRpX2Jvb3Rfc3RhbmRhcmQoInJlc3BvbnNlX3dpdGhfbmEiLCBuYS5ybSA9IFQpICU+JQogICAgICAgICAgICAgICAgICAgICAgdW5ncm91cCgpLAogICAgICAgICAgICAgICAgICAgIGFlcyh5ID0gbWVhbiwgeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLAogICAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgZmF0dGVuID0gMiwgc2hvdy5sZWdlbmQgPSBGLAogICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSBkb2RnZV93aWQpKSArCiAgICBnZW9tX3RleHQoZGF0YSA9IC4gJT4lIGRpc3RpbmN0KGVwaV9jdHJ5LCBlcGlfY2hhcmMsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbl91bml2MiwgZmFjZXQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbl90ZXh0LCBuKSwKICAgICAgICAgICAgICBhZXMobGFiZWwgPSBwYXN0ZTAoIm49IiwgbiksIHkgPSA0LjUpLAogICAgICAgICAgICAgIHNpemUgPSAyLjUsIGNvbG9yID0gImJsYWNrIiwKICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gZG9kZ2Vfd2lkKSkgKwogICAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiLCBndWlkZSA9ICJub25lIikgKwogICAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCA1LCAxKSwKICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKHN0cl93cmFwKCJOZXZlciBPUiAnbm8nIG9uIGJhc2UgcXVlc3Rpb24iLCAxMyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJfd3JhcCgiT25jZSBvciB0d2ljZSIsIDEzKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cl93cmFwKCJBdCBsZWFzdCBvbmNlIGEgeWVhciIsIDEzKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cl93cmFwKCJBdCBsZWFzdCBvbmNlIGEgbW9udGgiLCAxMyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJfd3JhcCgiQXQgbGVhc3Qgb25jZSBhIHdlZWsiLCAxMyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJfd3JhcCgiRXZlbiBtb3JlIiwgMTMpKSkgKwogICAgc2NhbGVfc2hhcGVfbWFudWFsKCJDaGFyaXNtYXRpYyBzdGF0dXMiLCB2YWx1ZXMgPSBjKDE5LCA4KSkgKwogICAgbGFicyh0aXRsZSA9IHBhc3RlKHRvdXBwZXIoc2l0ZSksICJTcGlyaXR1YWwgZXhwZXJpZW5jZXMgKFF1ZXN0aW9ucyAjMTEtMTUpOiBSZXNwb25zZXMgdG8gZnJlcXVlbmN5IHF1ZXN0aW9ucyIpLAogICAgICAgICBzdWJ0aXRsZSA9ICJFcnJvciBiYXJzIGFyZSBib290c3RyYXBwZWQgOTUlIENJcyIsCiAgICAgICAgIHggPSAiQ2hhcmlzbWF0aWMgc3RhdHVzIiwgeSA9ICJSZXNwb25zZSIpCiAgCiAgcmV0dXJuKHBsb3QpCn0gCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDcsIGZpZy5hc3AgPSA0fQpkX3NwZXhfcTExdG8xNV9wbG90Ml91cyA8LSBkX3NwZXhfcTExdG8xNV9wbG90X2Z1bjIoIlVTIiwgMSkKZF9zcGV4X3ExMXRvMTVfcGxvdDJfZ2ggPC0gZF9zcGV4X3ExMXRvMTVfcGxvdF9mdW4yKCJHaGFuYSIsIDEpCmRfc3BleF9xMTF0bzE1X3Bsb3QyX3RoIDwtIGRfc3BleF9xMTF0bzE1X3Bsb3RfZnVuMigiVGhhaWxhbmQiLCAxKSAKIyBkX3NwZXhfcTExdG8xNV9wbG90Ml9jaCA8LSBkX3NwZXhfcTExdG8xNV9wbG90X2Z1bjIoIkNoaW5hIiwgMSkgIyBtaXNzaW5nCiMgZF9zcGV4X3ExMXRvMTVfcGxvdDJfdnQgPC0gZF9zcGV4X3ExMXRvMTVfcGxvdF9mdW4yKCJWYW51YXR1IiwgMSkgIyBtaXNzaW5nCgojIHBsb3RfZ3JpZChkX3NwZXhfcTExdG8xNV9wbG90Ml91cywgZF9zcGV4X3ExMXRvMTVfcGxvdDJfZ2gsIAojICAgICAgICAgICBkX3NwZXhfcTExdG8xNV9wbG90Ml90aCwgCiMgICAgICAgICAgIG5jb2wgPSAxLCByZWxfaGVpZ2h0cyA9IGMoMSwgMSwgMikpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDcsIGZpZy5hc3AgPSAxLCBpbmNsdWRlID0gVH0KZF9zcGV4X3ExMXRvMTVfcGxvdDJfdXMKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNywgZmlnLmFzcCA9IDEsIGluY2x1ZGUgPSBUfQpkX3NwZXhfcTExdG8xNV9wbG90Ml9naApgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA3LCBmaWcuYXNwID0gMS42LCBpbmNsdWRlID0gVH0KZF9zcGV4X3ExMXRvMTVfcGxvdDJfdGgKYGBgCgoKCgo=